我大學畢設當時寫的socket通信,老師問過我用沒用到多執行緒,我當時也只能勉強實作通信和界面效果。作業也有一年了,想重新寫這個專案,多執行緒網路通信一直是我心中的一個坎。
我上網搜了一下,用了兩種方法我發現都不能實作通信。
void Server::incomingConnection(qintptr handle)
{
//①
// SocketThread* socket_thread = new SocketThread(handle);
// socket_thread->start();
//②
ServerTcpSocket* server_socket = new ServerTcpSocket(handle);
server_socket->moveToThread(new QThread());
addPendingConnection(server_socket);
}
第一種是服務器在來新連接時,創建一個執行緒,執行緒里有一個socket,thread::run()如下。
void SocketThread::run()
{
ServerTcpSocket* socket = new ServerTcpSocket(ptr_);
socket->waitForReadyRead();
exec();
}
第二種是服務器在來新連接時,創建一個socket,如果不加server_socket->moveToThread(new QThread()); 這行代碼,socket是可以讀客戶端傳來的訊息,加上moveToThread()則不能。
為什么這兩種都不行呢?
uj5u.com熱心網友回復:
原來第二種moveToThread()中的thread沒start(), 這個可以運行了。我還是比較想用第一種思路,thread::run()中具體要怎么寫才能在除錯的時候收到socket::readyRead()呢轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/112572.html
標籤:網絡通信
