2012-02-14 87 views
2

在我的C++ Windows應用程序中,我使用CreateFile函數來訪問文件。我使用的還有以下功能來控制我的文件:異步調用C++中的CreateFile和ReadFile

DeviceIOControl ReadFile SetFilePointer

,因爲我想我的應用程序將在同一時間訪問該文件在許多位置(從請求我去我應用程序)我希望我的應用程序將是異步的。我看到有一個叫做FILE_FLAG_OVERLAPPED的標誌,但我不知道如何使用它,我什麼時候知道它何時完成其操作。 有沒有我必須註冊的回調? 如果你能在這裏複製的樣本也將有助於

感謝

+0

RTFM:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686358%28v=vs.85%29.aspx – 2012-02-14 13:05:35

回答

0

你可以只產生一個新的線程,並從第二個線程同步調用ReadFie()。您需要使用同步對象(如事件或臨界區)來同步兩個線程。

如果您堅持使用單線程異步方法,請調用ReadFile()或ReadFileEx()並傳遞OVERLAPPED結構。該結構將提供一個回調函數,該函數將在文件讀取完成後調用。

但是,對於要調用的回調函數,調用線程(稱爲ReadFile()或ReadFileEx()的函數)必須位於alertable state中。

您只需使用其中一個等待函數掛起線程並等待讀取函數調用回調函數。

+0

或者只是使用I/O完成端口。 – 2012-02-14 13:04:12