我調用該方法win32::WriteFile
,然後我打電話是否可以調用WriteFile並且應用程序將永遠等待回調?
WaitForSingleObject(handle, INFINITE)
與我在電話WriteFile
使用相同的句柄。
是否有可能有一些情景,以便我會永遠等待......並且WriteFile
不會完成他的寫作?我打算寫512 kB,我假設我的硬件沒有問題。
我希望得到FAIL
而不是等到永遠。
我調用該方法win32::WriteFile
,然後我打電話是否可以調用WriteFile並且應用程序將永遠等待回調?
WaitForSingleObject(handle, INFINITE)
與我在電話WriteFile
使用相同的句柄。
是否有可能有一些情景,以便我會永遠等待......並且WriteFile
不會完成他的寫作?我打算寫512 kB,我假設我的硬件沒有問題。
我希望得到FAIL
而不是等到永遠。
當您進行重疊I/O調用時,您將責任委派給驅動程序,以確保及時完成它。如果驅動程序有錯誤或者硬件功能失常,那麼沒有什麼合理的辦法可以做到,當這樣的低級操作失敗時,程序不能繼續以有用的方式操作。
當心,你已經通過了一項指針,司機是爲了填補一個緩衝區,繼續超時到期後運行留下了懸擺指針,一個司機可能使用噴字節到你的過程時它實際上設法完成請求。你至少必須調用CancelIo()來解決這個問題。如果返回false,則終止進程。
這一切都毫無意義,您需要從操作系統提供最低限度的服務保證。你也可以在沒有OVERLAPPED的情況下調用WriteFile()。同樣的越野車司機現在將掛起你的程序。就像CancelIo()不會掛起一樣。沒關係,這是有問題的驅動程序,而不是你。這並不是說用戶不會注意到機器存在嚴重問題,其他程序也會遭受這種不幸。
不要編寫處理非常不可能的轉角情況的代碼。最重要的是,不要編寫無法有效測試的代碼。
哦,等等..這是重疊IO? :(((什麼句柄是OP等待? – 2012-04-23 13:37:50
這不應該發生,但它通常與一些'不太理想'的驅動程序。網絡操作在返回之前可能需要很長時間,所以我建議你應用一個很長的超時時間,也許是2分鐘(1000 * 60 * 2),如果超時,關閉/重新打開並重試writeFile()。
您必須使用帶有某些標誌的OVERLAPPED IO才能進行非阻塞式寫入系統調用。 – RedX 2012-04-23 11:48:29
我知道了......試試吧:) – Yanshof 2012-04-23 12:25:13
然後我不明白你的問題......也許你可以重新翻譯它或者發表一些代碼來澄清。 – RedX 2012-04-23 12:27:01