1

私は自分のプログラムでスレッドを使用していません。しかし、このサードパーティ製のアプリケーションで問題が発生しています。C++での並列スレッドに関する一般的な質問

オフサイトバックアップソリューションであり、サーバーと多数のクライアントを備えています。私たちにはすべてのクライアントを管理するための管理コンソールがあり、そこには問題があります。

クライアント側のアプリケーションの1つが停止したり、壊れた状態で実行されている場合、管理コンソールは永遠に応答を待って何も表示しません。

$for(client= client1; client < last_client; client++){ if (getOServConnection(client, &socHandler)!=NULL) { .. } }

私はこれには2つのソリューションを求めています。とにかく知りたいのですが、関数getOServConnectionのタイムアウトを設定できるので、X秒以内に応答が得られます。

そして、この関数をすべてのクライアントに対して並列に呼び出す方法を知りたいので、X秒以内にすべてのクライアントからの応答を取得します。

getOServConnectionにはWSAConnect呼び出しが含まれています。ソケット上のオプションは使用しません。これは他のモジュールで使用されており、アプリケーションに深刻な影響を与えるためです。

答えて

1

最初..別のスレッドにハングするコールを移動する場合は、メインスレッドを使用してタイマーを開始し、タイムアウトを待つことができます。 Visual C++を使用していて、Win32の場合は(rather old) MFC based timerを使用できます。このタイマーが終了すると、OnTimerという関数呼び出しが起動します。このタイマーは、異なるシステムベースのスレッドで動作するため、アプリケーションのメインスレッドには影響しません。

2番目です。その接続でスレッドをいくつでも起動する必要がある場合は、そのために使用するデザインパターンを考える必要があります。固定数のスレッドを使用することができます。その場合は、object poolを使用します。スレッドの数が(比較的)無制限の場合は、factory method

+0

ええ、私はスレッドを使用することに決めました。私はCreateThread()を使ってスレッドを開始し、forループに入れてdoステータスを取得するWaitforMultipleObjects。 – roymustang86

関連する問題