ネットワークブロックせずにuiにQt4.7
-
29-09-2019 - |
質問
私たサーバに複数のクライアント接続できます。クライアントはGUIをサーバにはョンをインストールして下さい。クライアントを複数の機能などを接続して、ログインがサーバに送信を受けるべきであるのです。
基本的にIを実行する必要があるQTcpSocket機能waitForConnectionとwaitForReadyRead.しかしながらプレーする必要がありまいのこのブロックせずにポートします。
何を思ったのは以下のようになりました。てクラス(クライアント)の実施QThreadなすべての待ちしております。って生成される。
Client::Client (...)
{
moveToThread (this); // Not too sure what this does
mClient = new QTcpSocket (this);
start();
}
void Client::run (void)
{
exec();
}
void Client::connectToServer (...)
{
mClient->connectToHost (hostname, port);
bool status = mClient->waitForConnected (TIMEOUT);
emit connected (status);
}
void Client::login (...)
{
... Similar to connectToServer ...
}
その後、GUI(例えば、ConnectToServerDialogっこいい作り上げていきたいと考えている。に接続して使う"接続され信号からのスレッドのダイアログにない場合は接続された接続は正し出す信号です。
QMetaObject::invokeMethod (mClient, "connectToServer", Qt::QueuedConnection,
Q_ARG (const QString &, hostname), Q_ARG (quint16, port));
をしている障害を主張することで送信イベントオブジェが所有する別のスレッド) 私はかなり新しいQtないわからない場合こんなことしていますが、正しいものです。
でかいないということは、良いアプローチとその理由は私のプログラムチ?
解決
今からとっても待ち遠しいですが始のスレッドにコンストラクタです。
初期化のように:
Client * client = new Client();
client->moveToThread(client);
client->start();
まにしたくないなどの溶液に、追加のコンストラクタの前に start();
ライン this->moveToThread(this);
upd:いった一般的ですが、オプションでこの文字列になります。
他のヒント
最高のものではな呼び方法のようなwaitForBlah()...強制力のイベントループを待ち、未定期間のGUIの凍結中にある。代わりに、接続QTcpSocketの接続信号を一部のスロットが更新GUIとして適切なうイベントループを継続しています。なお接続してもそのスロットに実装されていません。