我有一个C ++程序,该程序从父线程启动两个线程,我需要从子线程中杀死两个子线程。
Main的孩子是b和c。
我需要从b中杀死b&c。问题是,我不能使用简单的标志,因为c等待使用cin的输入。 我尝试从b内部使用终止,希望整个主循环将重新启动。
这是我的代码,我需要从t1中杀死t1和t2。
void recieve_(){
//STEP 5 recieving
while (!restart){
iRecv = recv(TCPClientSocket, RecvBuffer, iRecvBuffer, 0);
if (iRecv == SOCKET_ERROR){
int err = WSAGetLastError();
cout << "recv failed: " << err << endl;
if (err == WSAECONNRESET){
cout << "server disconnected" << endl;
system("deletesockclient.exe");
}
Sleep(300);
}
else{
cout << "Recieved: " << RecvBuffer << endl;
}
}
}
void send_(){
//STEP 6 send data to server
while (!restart){
cout << "Enter message: ";
string s;
cin >> s;
cout << endl;
strcpy(SenderBuffer, s.c_str());
iSend = send(TCPClientSocket, SenderBuffer, iSenderBuffer, 0);
if (iSend == SOCKET_ERROR){
cout << "sending failed: " << WSAGetLastError() << endl;
}
cout << "sent successfully" << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
while (true){
init();
thread t1(recieve_);
thread t2(send_);
t1.join();
t2.join();
//STEP 7 close socket
iCloseSocket = closesocket(TCPClientSocket);
closesocket(TCPClientSocket);
WSACleanup();
}
system("PAUSE");
return 0;
}
答案 0 :(得分:0)
找不到解决方案,但解决了问题。将send void与主线程集成在一起,因此接收线程只需要杀死自己,而不能杀死两个“子”线程。