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
且未执行任何发出事件信号以满足等待的操作。您希望此代码执行什么操作?它没有注释,也没有描述其预期功能。