请大家帮忙:我怎么用发消息的方法实现多线程的vcl访问(替代syncronize方法)(100分)

  • 主题发起人 budianermayi
  • 开始时间
B

budianermayi

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用syncronize()方法操作vcl时,由于有线程的suspend调用,造成死锁,我想如果
通过向主线程发送消息的方法操作vcl可能可以避免,可是我不知怎么做!!
大家帮帮我!!!
欢迎灌水
 
d5及以前版本本来就是通过发消息实现synchronize的。
 
我知道是这样,但是好像它会造成死锁,当我将一个正执行syncronize方法的线程挂起的
时候,请问怎么解决??我看有人好像用自己发消息的方法来做.怎么做?
 
用异步消息驱动 PostMessage !
不过这对于数据而言,并不是线程安全的,只能够解决VCL要求同步执行的问题。
 
用sendmessage
PostMessage是发给线程。sendmessage是发给窗体的。前者无返回信息,后者要返回后才会做下一步
 
能不能举个用postmessage的例子,详细的,谢谢.
 
再卖一回:
线程:
const
CM_MYMSG = WM_USER + 100;
发消息:
PostMessage( Application.MainForm.Handle, CM_MYMSG, 0, 0);
主线程:
procedure MyMessage(var Msg : TMessage);
message CM_MYMSG;
procedure TMainForm.MyMessage(var Msg : TMessage);
begin
....
end;
 
顶部