2016-08-28 15 views
0

私はQt 5.6を使用しています。私は単純なチャットアプリケーションに取り組んでいて、新しいスレッドで新しい接続をすべて処理するためにQTcpSocketを含む新しいスレッドを作成しなければならないということをすべていくつかの場所でオンラインにしました。複数の接続を可能にするQTcpServerを作成すると、なぜ新しいスレッドでソケットを作成する必要がありますか?

私はQTcpSocketsQListを使用してすべての接続を処理できない理由を理解しようとしています。誰かがなぜ私に説明してくれますか?

私が間違っていて、それが完全にうまくいくものなら、私にも教えてください。

ありがとうございます。

+0

ます** **上のすべての接続を処理するためQTcpSocket's 'の' QList'を持つことができますメインスレッド実際、Qtではこの解決法が好まれます。接続ごとに新しいスレッドを作成する必要はありません。 – Mike

+0

は、あなたが参照しているオンラインの場所のいくつかのリンクを提供します。 **すべての**接続**を扱うための** QTcpSocket' **を含む新しいスレッドを作成します。どうすればすべての接続を処理できる 'QTcpSocket'ができますか?あなたは 'QTcpServer'を意味しましたか? – Mike

+0

@Mike Oh、私はすべての 'QTcpSocket'に対して新しいスレッドを作ったと言っていました。特に、私はvoidrealmのYouTubeのqtプレイリストからそれを聞いた。私は本当に夜遅くそれを作ったので、疲れていました。お返事をありがとうございます。 –

答えて

1

マルチスレッドtcpサーバーを使用するか、または1つのスレッドtcpサーバーを使用するかは、タスクによって異なります。いくつかのタスクでは、十分なスレッドが1つあり、「QListQTcpSockets」を使用することができます。このようなタスクの主な特徴は、次のとおりです。

  1. 同時着信接続が少ない。 (マルチスレッドを使用する必要がある場合の同時着信接続のクリティカル数もタスクに依存しますが、同時に10以上の着信接続がある場合は、マルチスレッドを考慮する必要があります)。
  2. ネットワーク負荷が低い/低いネットワークの相互作用。

それ以外の場合は、いくつかのジョブを並行して作成する機会を得て、tcpサーバーを実行する方がよい場合もあります。 1つのスレッドでどのくらいの接続があるかは、タスクによって異なりますが、非常に多くのスレッドを作成することも悪い考えです。パフォーマンスに問題が生じるからです。多くの時間が文脈の切り替えに費やされます。

は、私が思うに、あなたのケースでは、あなたが最も簡単なバリアントを使用することができ、「ちょうど使用QListQTcpSocketsの」

+0

あなたの返信ありがとう!しばらくの間、その答えを知りたがっていました。 –

関連する問題