私は最近、スレッド化されたソケット サーバーについて詳しく調べています。残念ながら、ユーザーが別のユーザーに PM またはプライベート メッセージを送信できるコードをまだ見つけていません。それぞれがスレッドを介して接続されているため、スレッドの変数を変更する方法を探していました。各スレッドが (mutex を使用して) 解析するすべてのメッセージを保持するグローバル変数を作成する必要がありますか?
質問する
73 次
1 に答える
0
はい、ミューテックスで保護された、ある種の共有データ構造が必要です。
グローバルである必要はありませんが、すべての接続処理スレッドがそれへの参照を必要とします。グローバルはそれを達成しますが、メインスレッドに割り当てられたデータ構造もそうであり、それへの参照が作成時に各スレッドに渡されます。
スレッドが読み取り元のソケットでブロックするようにスレッドが書き込まれていると仮定すると、新しい (内部) メッセージがあるときにスレッドを起こすのが難しい部分です。これを解決する最も簡単な方法は、おそらくpipe()
for each スレッドを作成し、select()
処理しているソケットとパイプでスレッドをブロックすることです。次に、パイプを介してプライベート メッセージを送信できます。共有データ構造は、接続されているユーザーを検索し、パイプのファイル記述子を見つけることだけになります。
于 2013-01-17T03:16:48.357 に答える