[英]WaitForSingleObject : how to get handle from _beginthreadex
[英]How to signal file HANDLE waiting with WaitForSingleObject
我無法控制的這段代碼使用重疊的I / O讀取文件:
// Read file asynchronously
HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...);
BYTE buffer[10];
OVERLAPPED oRead = { 0 };
ReadFile(hFile, buffer, 10, NULL, &oRead);
// Do work while file is being read
...
// Wait for read to finish
WaitForSingleObject(hFile, INFINITE);
// ReadFile has finished
// buffer now contains data which can be used
...
在另一個線程中(實際上在ReadFile的API掛鈎中),我需要向hFile
信號以解除對WaitForSingleObject
阻塞。 通常,Windows(或處理ReadFile
的設備驅動程序)會執行此操作,但是我需要對其進行模擬。
我發現沒有一個可以正常使用hFile
的API,包括ReleaseMutex
, ReleaseSemaphore
和SetEvent
。 它們都返回錯誤6(句柄無效)。 是否有適用於文件,命名管道或通信設備的API?
我知道不推薦使用WaitForSingleObject(hFile)
,但是上面的代碼是給定的,我需要使用它。 謝謝!
據我所知,發信號通知文件句柄發生在Windows內部,即使在內核模式下運行也沒有API。 (我相信文件系統驅動程序只是告訴Windows該操作已完成,並讓Windows知道如何通知用戶模式進程。我可能是錯的。)
一種解決方案是針對該句柄發出真正的ReadFile(零字節讀取可能就足夠了),以便發出信號。
但是掛上WaitForSingleObject可能更明智,檢查是否正在有問題的文件句柄上調用它,如果合適,請修改行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.