Qt のシグナルとスロットは、プログラムのイベント ループで処理されます。シグナルが発行されると、接続されたスロットのいずれかへの呼び出しがキューに入れられ、イベント ループのティック中に処理されます。シグナルを送信するためのオーバーヘッドは非常に低いです。Qt のドキュメントによると、1 つのスロットに接続すると 1 秒あたり約 2,000,000 の信号を送信でき、i586-500 の 2 つのスロットに接続すると 1,200,000 の信号を送信できます。着信データの処理は、シグナルの送信に費やされる時間と比較して、プログラムの応答時間のはるかに大きな部分を占める可能性があります。データ オブジェクトの構築がネットワークから入ってくる情報の速度に追いつくことができる限り、問題なく信号を発信できます。シグナルは受信オブジェクトのキューに追加され、イベント ループの次のパスで処理されます。
複数の受信者がパケット データを変更することを心配している場合は、参照やポインターではなく値でデータ オブジェクトをシグナルに渡すことによって、着信ネットワーク データの一意のコピーを送信している限り、次のように接続できます。スロットがデータを変更することを心配することなく、複数のスロット。
シグナルとスロットのメカニズムを使用して、着信ネットワーク データを処理し、グループの学校プロジェクトに大きな効果をもたらしました。UDP プロトコルを使用してクライアントと通信し、小惑星を連想させるマルチプレイヤー シューティング ゲームを実装します。シグナルとスロットを使用して、サーバーのさまざまなクラスにパケット データを配信することに問題はありませんでした。私が遭遇した問題のほとんどは、ゲームのネットコードのアルゴリズムの単純さが原因でした。(すべてがパケットごとに更新され、クライアント側のラグ補償はありません) 興味がある場合は、コードを公開してここで表示できます: http://foxx.arksaw.com/svn/tis/興味深いのは「netlib」です。 「サーバー」および「クライアント」ディレクトリ。