1,waitforsingleobject用于等待指定事件(如os.hEvent)发生。但问题是:createevent中并未赋予事件一个含义,那么waitforsingleobject到底如何判断未知事件发生与否呢?   Os.hevent:=createEvent(nil,true,false,nil);
   WaitForSingleObject(os.hEvent, infinite);2,waitcommevent和waitforsingleobject有时候会配合使用,这样做有什么好处?如下:(源码为delphi)
  
  Os.hevent:=createEvent(nil,true,false,nil);
  SetCommMask(hcomm, EV_RXCHAR);
  while Connected and (not Terminated) do
  begin
    PurgeComm(hComm, PURGE_RXCLEAR);         // 清除COM 数据
    WaitCommEvent(hComm, dwEvtMask, @os);
    if Terminated  then break;                
    Signaled := WaitForSingleObject(os.hEvent, infinite);
    if Connected and (Signaled = WAIT_OBJECT_0) then
       ……//超时处理   
  end;3,delphi中cardinal型和Thandle型什么关系?
  例如我用createevent返回一个handle,叫做hevent,但鼠标放在hevent上,提示说是cardinal型··为什么呢?4,超时设置应该怎么设置?
   
  我设置超时的出发点是使得waitcommevent和waitforsingleobject在同步机制下能够超时返回(5s),但下面设置好像无效。应该怎么做?
   
  CommTimeOuts.ReadIntervalTimeout := 5000;             
  CommTimeOuts.ReadTotalTimeoutMultiplier := 0 ;         
  CommTimeOuts.ReadTotalTimeoutConstant := 5000 ;       
  CommTimeOuts.WriteTotalTimeoutMultiplier := 0;         
  CommTimeOuts.WriteTotalTimeoutConstant := 0 ;           
  SetCommTimeouts(hcomm, CommTimeOuts);  

解决方案 »

  1.   

    事件用于线程间同步,是最简单一种同步方式。
    “createevent中并未赋予事件一个含义”?楼主没深入了解几个同步相关的机制啊。事件就2状态:有信号和无信号,setevent()-有信号,resetevent()-无信号。
      

  2.   

    还有,楼主的几个问题涉及到线程和通信的基本问题,想回答,可是写着写着,还是解释不清楚,呵呵,所以,还是建议先看看“WINDOWS高级编程”和“WINDOWS串口通信编程”。
      

  3.   


    谢谢jankercsdn的提点··我去找事件、同步的资料再研究一下··
      

  4.   

    串口用控件就行了,都开放源码的!推荐cport3.1