C++ 我在C++;其返回值为;等待“对象0”;总是
函数C++ 我在C++;其返回值为;等待“对象0”;总是,c++,serial-port,C++,Serial Port,函数WaitForSingleObject在所有情况下都返回timeout标志(“WAIT\u OBJECT\u 0”) 仅针对测试,我对这一行进行了评论 (while((WaitForSingleObject(ovread.hEvent,timeout)==WAIT_OBJECT_0))) 而comport的响应与预期一致。 我尝试过各种超时,包括无限超时。 有人能告诉我错误可能发生在哪里吗 int timeout=500; OVERLAPPED ovread; memset(&ov
WaitForSingleObject
在所有情况下都返回timeout标志(“WAIT\u OBJECT\u 0”)
仅针对测试,我对这一行进行了评论
(while((WaitForSingleObject(ovread.hEvent,timeout)==WAIT_OBJECT_0)))
而comport的响应与预期一致。
我尝试过各种超时,包括无限超时。
有人能告诉我错误可能发生在哪里吗
int timeout=500;
OVERLAPPED ovread;
memset(&ovread, 0, sizeof(ovread));
ovread.hEvent = CreateEvent( 0,true,0,0);
while((WaitForSingleObject(ovread.hEvent,timeout)==WAIT_OBJECT_0))
{
//Execute the following code
ReadFile(h,buf,sizeof(buf),&read,&ovread);
}
读取逻辑应或多或少使用以下代码流:
int timeout = 500;
OVERLAPPED ovread = {0}
ovread.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (ovread.hEvent == NULL) {
// Error creating overlapped event; abort.
return FALSE;
}
if (!ReadFile(h, buf, sizeof(buf), &read, &ovread)) {
if (GetLastError() != ERROR_IO_PENDING) {
// Handle error in communications
}
else {
DWORD ret = WaitForSingleObject(ovread.hEvent,timeout);
switch (ret) {
case WAIT_OBJECT_0:
HandleASuccessfulRead(buf, read);
break;
case WAIT_TIMEOUT:
// Handle timeout
break;
case WAIT_FAILED:
// Handle failure
break;
default:
// what else to handle?
break;
}
}
}
else {
// read completed immediately
HandleASuccessfulRead(buf, read);
}
为什么要手动重置事件(为传递
true
)?在显示的代码中,WaitForSingleObject()
不可能返回WAIT\u OBJECT\u 0
,因为代码正在调用CreateEvent()
带有bInitialState=FALSE
且未执行任何发出事件信号以满足等待的操作。您希望此代码执行什么操作?它没有注释,也没有描述其预期功能。