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);
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);
“createevent中并未赋予事件一个含义”?楼主没深入了解几个同步相关的机制啊。事件就2状态:有信号和无信号,setevent()-有信号,resetevent()-无信号。
谢谢jankercsdn的提点··我去找事件、同步的资料再研究一下··