2009-04-16 10 views
0

完了ポートを使用して別のスレッドから情報を取得したい場合は、どのようにプログラムの構造を設計できますか?IOCPについての質問

グローバル関数を使用する場合、どのようにしてmutexを設定できますか?

Main(){ 
    for i in range NumOfThreads{ 
    CreateIoCompletionPort() 
    CreatThread(ThreadFun) 
    } 
} 

ThreadFun(){ 

    While(1){ 
     GetQueuedCompletionStatus(); // wait for completion of an IO 
     Process What ever has completed(); 
     Start another file operation(); 
    } 

} 

答えて

0

このソリューションをお試しください:

Main(){ 
    for i in range NumOfThreads{ 
    CreateIoCompletionPort() 
    CreateThread(ThreadFun) 
    } 

    for i in range NumOfCallerThreads 
    CreateThread(ThreadCaller) 
} 

ThreadCaller(){ 
    While(1){ 
    Start another file operation(); 
    } 
} 


ThreadFun(){ 
    While(1){ 
     GetQueuedCompletionStatus(); // wait for completion of an IO 
     Process What ever has completed(); 
    } 
} 

あなたが任意のクリティカルセクションせずにそれを行うことができます!必要なのは、 "別のファイル操作を開始する(;)"という保証です。対応するIOCPを閉じた後に呼び出されません。

0

プッシュフレームワークhttp://www.pushframework.comは、着信接続を受け入れる別のスレッドを追加することを除けば、この設計も使用します。