Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1260307
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-04-22 11:00:58



先说我一直以来的观点,不知对错。  
   
  多线程的同步有三个方法,建互斥锁,Synchronize和消息。前两个我不说了,只说消息。  
   
  我作的消息同步就是把需要同步的操作放到主窗体的消息响应事件中。  
  即:  
  procedure   TfrmMain.DO_USERMSG(var   Message:   TMessage);   message   WM_USERMSG;  
  begin  
      //do   something  
  end;  
   
  每个线程在满足条件时会给主窗体发消息。  
   
  这样DO_USERMSG函数是在主线程中执行的函数,应该不存在并发问题。但是实际上不是这样的,比如把函数改为:  
   
  procedure   TfrmMain.DO_USERMSG(var   Message:   TMessage);   message   WM_USERMSG;  
  begin  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
       
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
  end;  
   
  Memo1中的内容是混杂在一起的。  
   
  我在函数中加了互斥量,问题才解决了,为什么是这样呢,判各位指点。

线程的消息同步不是WIN系统的Postmessage   或   SendMessage    
   
  《WINDOWS核心编程》仔细看看,绝对值得购买。

帮顶   消息是队列。。。

同步还有临界区的方式,但只能用在同步同一个进程的多个线程,但它的速度最快,占用资源最少。  
   
 

我不理解的主要是DO_USERMSG函数好像是并发执行的。

不是并发,但是memo处理的响应速度不及时,导致看起来像并发,界面完成一个消息的工作是需要时间的,不然Delphi的线程也不会有这段提示了:  
  {   Important:   Methods   and   properties   of   objects   in   VCL   or   CLX   can   only   be   used  
      in   a   method   called   using   Synchronize,   for   example,  
   
              Synchronize(UpdateCaption);  
   
      and   UpdateCaption   could   look   like,  
   
          procedure   xxxx.UpdateCaption;  
          begin  
              Form1.Caption   :=   'Updated   in   a   thread';  
          end;   }

晕,这样的问题才叫基础问题?

发送消息的时候用PostMessage不用SendMessage



--------------------------
新闻:大脑推客:通过电脑思考即可发布Twitter消息
网站导航: 博客园首页  新闻  .NET频道  社区  博问  闪存  找找看
阅读(1222) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~