У меня простой вопрос, я сделал сервер с 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("OK\n");
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("KO\n");
std::cout << "CLIENT " << _remoteEndPoint << "ASKS FOR STARTING THE ROOM " << CYAN << _tmpIdRoom << DEFAULT << " : " << GREEN << "KO" << DEFAULT << std::endl;
}
}
и как только я нахожусь впоток, если я пытаюсь отправить какие-либо известные команды, сервер больше не отвечает._cmd заблокирован на последнем, который я отправил перед запуском сервера, это означает "начальная комната".