0

pthread_cond_signalWinOS でpthreads のようなものを実装するにはどうすればよいですか。Win64 もサポートしているため、これには pthreads Win32 ポートを使用したくありません。

私は、クライアント要求がサーバー上で n スレッドを生成する n タスクを生成するタスクベースのシステムに取り組んでいます。クライアント スレッドがすべてのサーバー タスクを生成した後、システム リソースを消費しないスリープ状態またはその他のスレッド状態に入るようにします。すべてのサーバー タスクが完了したら、クライアント スレッドを起動して、クライアント アプリケーションに結果を返します。

編集:共有メモリで条件変数を待機し、ループで condvar をチェックすることを考えましたが、ループもリソースを消費しませんか? ループ内に追加できsleep()ますが、リアルタイムのクライアント要求とサーバー応答を取得できません。タスクには 1/1000 秒 (ただし数秒) かかる可能性があるためです。

4

2 に答える 2

3

Win32 API は、Vista 以降の条件変数をサポートしています。APIについてはこの MSDN ページを、使用例についてはこのページを参照してください。

WakeConditionVariable()と同等でpthread_cond_signal()あり、WakeAllConditionVariable()同等ですpthread_cond_broadcast()

そうは言っても、VS2012 を使用している場合は、新しいC++11 スレッド ライブラリを使用することを強くお勧めします。条件変数もサポートしており、複数のプラットフォームで実行することが重要であるため、標準ライブラリを使用すると、最終的にコードベースをマージするのに役立ちます。

于 2013-01-02T12:32:28.597 に答える
1

イベント関数や WaitForMultipleObject などを使用できます

イベント関数の詳細: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686360(v=vs.85).aspx#event_functions

WaitForSingleObject の詳細はこちら: http://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx

win32 での同期の詳細: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686360(v=vs.85).aspx

于 2013-01-02T12:26:54.380 に答える