簡體   English   中英

如何用WaitForSingleObject通知文件處理等待

[英]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,包括ReleaseMutexReleaseSemaphoreSetEvent 它們都返回錯誤6(句柄無效)。 是否有適用於文件,命名管道或通信設備的API?

我知道不推薦使用WaitForSingleObject(hFile) ,但是上面的代碼是給定的,我需要使用它。 謝謝!

據我所知,發信號通知文件句柄發生在Windows內部,即使在內核模式下運行也沒有API。 (我相信文件系統驅動程序只是告訴Windows該操作已完成,並讓Windows知道如何通知用戶模式進程。我可能是錯的。)

一種解決方案是針對該句柄發出真正的ReadFile(零字節讀取可能就足夠了),以便發出信號。

但是掛上WaitForSingleObject可能更明智,檢查是否正在有問題的文件句柄上調用它,如果合適,請修改行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM