线程中的通信丢失
Communication lost in thread
我的问题很简单,我已经用Boost Asio做了一个服务器。效果很好。问题是当我启动 std::thread 时,我无法再与服务器通信。
你能告诉我为什么吗?因为我真的不明白。谢谢!
这是我处理我收到的函数:
void Server::handleCmd()
{
if (isClientExist() == false) {
addClient();
}
_vTmpString = Tools::splitString(_cmd, ' ');
_idCmd = Tools::stringToInt(_vTmpString[0]);
switch (_idCmd)
{
case CREATEROOM:
createRoom();
break;
case DISCONNECTION:
delClient();
break;
case GETROOM:
getVectorRoomsForClients();
break;
case JOINROOM:
joinRoom();
break;
case LEAVEROOM:
leaveRoom();
break;
case STARTROOM:
startGame();
break;
}
}
启动线程的函数:
void Server::startGame()
{
_vTmpString = Tools::splitString(_cmd, ' ');
if (_vTmpString.size() != 2 && Tools::isNumber(_vTmpString[1]) == true)
return;
_tmpCmd = _vTmpString[0];
_tmpIdRoom = std::stoi(_vTmpString[1]);
if (_vTmpString.size() == 2 && _tmpCmd == "startroom" && _tmpIdRoom < 10000) {
sendMsg("OKn");
std::cout << "CLIENT " << _remoteEndPoint << " ASKS FOR STARTING THE ROOM " << CYAN << _tmpIdRoom << DEFAULT << " : " << GREEN << "OK" << DEFAULT << std::endl;
std::thread launchGame(&Server::gameLoop, this, _tmpIdRoom);
launchGame.join();
} else {
sendMsg("KOn");
std::cout << "CLIENT " << _remoteEndPoint << "ASKS FOR STARTING THE ROOM " << CYAN << _tmpIdRoom << DEFAULT << " : " << GREEN << "KO" << DEFAULT << std::endl;
}
}
一旦我进入线程,如果我尝试发送任何已知命令,服务器将不再响应。 _cmd在启动服务器之前发送的最后一个被阻止,这意味着"开始室"。
launchGame.join()
块,直到线程终止。而且由于线程显然运行游戏循环,因此它不会在一段时间内终止。在这一点上加入它没有什么意义。
相关文章:
- C++一个线程如何正确通信其任务已完成?
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 线程之间的通信不起作用 - C++
- 关于套接字通信的线程
- ZeroMQ:如何使用inproc减少多线程通信延迟
- 用于线程间通信的 Windows 套接字
- 与处理 ZeroMQ 的永久线程与 Qt 通信
- 与非主线程的 GUI 线程通信
- 使用 C++14 和 GLib (GDBus) 的线程通信
- 使用Protobuf进行线程通信
- C 14中的乘数交叉线程通信
- 串口读取功能的通信超时和线程不超时
- 使用PTHREDS与C 进行线程通信
- Qt中的多线程通信
- 远程、IPC 和线程场景中微服务的低延迟通信
- C++ - 多线程 - 线程之间的通信
- 线程中的通信丢失
- 与OpenSSL的多线程通信
- main()和线程()之间的通信
- Qt多线程通信