= ERROR_IO_PENDING) { // 发送失败处理}4.6 等待异步操作完成使用WaitForSingleObject或GetOverlappedResult函数等待异步操作完成。 WaitForSingleObject(overlappedRead.hEvent, INFINITE);if (waitResult == WAIT_OBJECT_0) { // 读取操作完成}// 或者使用GetOverlappedResult 函数if (GetOverlappedResult(hSerial, &overlappedRead, &bytesRead, FALSE)) { // 读取操作完成}4.7 关闭串口完成串口操作后
result) GetOverlappedResult(hVxD, &ovlp, &cbRet, TRUE); CloseHandle(hEvent); return OK; 当驱动程序完成所要求的操作时将发给一个特定的事件一个信号.与此同时WIN32程序可以完成一些其他事情.在绑定结束之前,Bind函数干不了更多的事情.因此在Bind的线程中仅仅调用了WIN32_API函数GetOverlappedResult 参数5: 保留指定操作的返回信息的缓冲区的地址 参数6: 上面提到的缓冲区大小 参数7: 一个双字(DWORD)变量的地址.这个变量表示驱动程序所返回的字节数.注意:这个变量也被用作GetOverlappedResult 函数来检查是否有数据包到达.假如GetOverlappedResult函数返回值为FALSE,同时调用GetLastError函数返回ERROR_IO_PENDING,应用程序就可以知道没有数据包到达. 假如GetOverlappedResult函数返回值为TRUE,则应用程序便知道有数据包到达,因此可以进行一些操作. 9.结论 这个VPACKET虚拟设备驱动程序提供给运行于Windows 95下的
[Microsoft][ODBC SQL Server Driver][Named Pipes]ConnectionRead (GetOverLappedResult()). driver={sql server [Microsoft][ODBC SQL Server Driver][Named Pipes]ConnectionRead (GetOverLappedResult()).
."); BOOL bRet = GetOverlappedResult(serial_handle_, &over_lapped, &read_size, TRUE); else { // 返回 false 可能是句柄已经被 close 了 QLOG_APP(L"GetOverlappedResult 写也是一样,我们可以用 GetOverlappedResult 或 WaitForSingleObject 来等待操作事件完成(记得要初始化 OVERLAPPED 否则会报错的)。
."); BOOL bRet = GetOverlappedResult(serial_handle_, &over_lapped, &read_size, TRUE); else { // 返回 false 可能是句柄已经被 close 了 QLOG_APP(L"GetOverlappedResult 写也是一样,我们可以用 GetOverlappedResult 或 WaitForSingleObject 来等待操作事件完成(记得要初始化 OVERLAPPED 否则会报错的)。
经过代码审查,我发现软件中异步读取时存在逻辑缺陷:在调用WaitForMultipleObjects等待操作完成后,随即调用函GetOverlappedResult数时,其最后一个参数bWait被错误地设为 四、修正问题针对此问题,我调整了GetOverlappedResult函数的参数设置,确保在I/O操作完全完成后再进行结果判断,有效解决了丢包难题。
异步I/O操作在进行异步I/O操作时,可以使用GetOverlappedResult函数来获取操作的结果。 这个函数的原型如下:BOOL GetOverlappedResult( HANDLE hFile, LPOVERLAPPED lpOverlapped, LPDWORD lpNumberOfBytesTransferred , BOOL bWait);如果bWait参数为TRUE,则GetOverlappedResult函数会等待操作完成。
3.WaitForSingleObject或WaitForMultipleObject判断或者异步设备调用GetOverLappedResult函数。 \n “); rc = GetOverlappedResult( hFile,
要检索返回的字节数,请调用GetOverlappedResult,如果hDevice与I / O完成端口相关联,则可以检索通过调用GetQueuedCompletionStatus返回的字节数。 其他链接: CreateEvent CreateFile Device Input and Output Control (IOCTL) GetOverlappedResult GetQueuedCompletionStatus
: FastCGI: comm with server xxx aborted: GetOverlappedResult() failed 替换成 mod_fcgid.so ,再运行cgi
确保至少设置一种超时机制推荐配置:ReadTotalTimeoutConstant=1000(1秒)8.2 重叠I/O中的超时行为超时规定操作完成时间,而非ReadFile返回时间需配合WaitForSingleObject或GetOverlappedResult
; return 0; } DWORD nbytes = 0; SetEvent(gevent); ResetEvent(gevent); GetOverlappedResult void* mappingaddr = MapViewOfFile(hmap, PAGE_READONLY, NULL, NULL, NULL); DWORD nbytes = 0; GetOverlappedResult
}returntrue;//继续等待}WaitResultProcessIOCompletion(HANDLEioEvent){//获取I/O结果DWORDbytesTransferred=0;if(GetOverlappedResult
Win32应用程序对这个事件马上进行响应,退出等待状态,并且将事件复位为无信号状态,然后调用GetOverlappedResult()函数获取IRP的处理结果。
通过GetOverlappedResult来捕获CreateProcessWithLogonW访问文件A时的OpLock事件。(此处解决了父进程欺骗打开lsass进程句柄的瞬时问题) 5.
= bPendingIO ) { if ( FALSE == GetOverlappedResult( m_hPipe, lpoConnect, &cbRet, FALSE
buffer.size(), &bytesRead, &overlapped); } std::vector<char> await_resume() { if (GetOverlappedResult
Some time later, I will call GetOverlappedResult, specifying the same structure again.
获取指定文件的完整路径名 GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母 GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径 GetOverlappedResult