2017-05-18 6 views
0

私は現在、select()を使用して複数のクライアントを処理するマルチクライアントサーバーに取り組んでいます。しかし、クライアントが重い計算を必要とするメッセージを送信する場合、クライアントからの他のメッセージに応答できるように、pthread_create()を使用して新しいスレッドを作成する必要があります。そのクライアントの計算が完了したら、クライアントにメッセージを返す必要があります。しかし、スレッドが終了したかどうか、最終結果を取得する方法を私がどのように知ることができるのか分かりません。明らかに私はこの新しいスレッドを実行している間私のサーバープログラムをブロックするので、pthread_join()を使用することはできません。それでCは、その子スレッドの最終結果を得るために使用できる関数を提供していますか?グローバル変数の使用も避けたい。C - pthreadを使用し、戻り値を待っています

スレッドはメインスレッドからそれに参加する前に終了している場合は、ちょうどあなたがここからそれを行う方法を取得する必要があります(非ブロッキングになる)

を確認することができます

+1

'それで、Cはその子スレッドの最終結果を得るために使用できる関数を提供していますか?'はい、select()。 – ThingyWotsit

+0

あるいは、スレッドに関連するfdを渡し、直接返信させてください。 – ThingyWotsit

+0

@ThingyWotsit私はselect()がファイル記述子でのみ動作すると考えました:| –

答えて

1

処理を終了したときに子スレッドがselect()で待機しているスレッドをウェイクアップさせたい場合は、pipe()を使用してパイプを作成できます。スレッドselect()を呼び出すスレッドは、そのファイル記述子セットにパイプの読み取り側を追加し、子スレッドは、作業が終了したときにパイプの書き込み側に書き込みます。

結果が大きすぎない場合は、パイプで結果を送信することもできます。

関連する問題