Есть у меня клиент-серверная апликуха. Клиент набирает какие-то команды, они отправляются на сервер и далее обрабатываются этой функцией:
void Server::ClientThread(SOCKET ClientConn)
{
int ID = -1, r;
char Func[32];
std::map<std::string, void(Server::*)(SOCKET, int)>::iterator It;
while ((r = recv(ClientConn, Func, sizeof(Func) - 1, NULL)) != -1 && r != 0)
if ((It = Functions.find(Func)) != Functions.end())
(this->*It->second)(ClientConn, ID);
std::cout << "Client disconnected\n";
if (ID != -1) DeleteUser(ID);
}
Функция выше запускается в новом потоке при каждом новом подключении.
Недавно я обнаружил, что поток завершается с ошибкой! Из-за этого программа иногда ведет себя странно..
При выходе из этой функции, а значит, и при завершении потока, выскакивает ошибка "символы не загружены _здесь название файла_". Ну первое, что я сделал, загрузил символы (вроде логично), но теперь вместо этого выдает "Исходный код не доступен" и предлагает посмотреть дизассемблированный код. Ах да, вот эта функция выше, она НЕ статическая. В поток я передаю ее по указателю на метод вместе с this.
И еще, при выходе из потока в отладчике я попал в файл xthread.
Там есть следующая ф-ия:
static unsigned int __stdcall _Call_func(void *_Data)
{ // entry point for new thread
static_cast<_Pad *>(_Data)->_Go();
return (0);
}
Вот именно в строчке return (0) мне и выдает ошибку..
В общем-то и все.
Буду благодарен за любую помощь!