比方說,我有一個阻塞方法,讓我們在Block()中調用。線程同步
因爲我不希望我的主線程阻塞我可能會創建一個工作線程,而是會調用阻止。但是,我有另外一個條件。
我想調用阻塞在5秒內返回頂部,否則,我想讓主線程知道調用阻塞失敗並退出工作線程。
什麼是該方案的最佳解決方案?
我是這樣想的: 創建一個線程workher,在工作線程創建一個定時器對象,擁有5秒, 而且除了打電話的GetTickCount前後調用塊之後,計算的增量。
此外,我將定義一個布爾型IsReturned指示Block函數是否已經返回。 Block調用後將其設置爲true。
根據定時器功能是布爾我決定如何處理:
如果布爾是真實的我什麼也不做。
如果布爾是假的,我可以排隊的APC onFailure處或在主線程或許信號Sucess事件,forcfully退出工作線程(事情是我不知道如果我能做到這一點)
此外,在塊函數返回之後,我檢查增量是否是lett,然後是5秒 並排隊APC OnSucess。 (問題是退出來電線程取消定時器也基本上因爲定時器無用)
ps - 如果我可以肯定地知道我可以取消定時器功能內的工作線程我不認爲我甚至需要gettickcount的東西。
謝謝!
你使用了什麼線程API?並行線程?提升線程? – mch 2009-12-16 00:54:11
這是什麼阻塞方法?你不能利用windows IO完成端口和SleepEX()嗎? – 2009-12-16 00:54:33
windows? Linux呢?蘋果系統? – 2009-12-16 03:41:37