C ++从子线程中杀死所有父子线程

时间:2019-07-07 14:59:08

标签: c++ multithreading

我有一个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;
}

1 个答案:

答案 0 :(得分:0)

找不到解决方案,但解决了问题。将send void与主线程集成在一起,因此接收线程只需要杀死自己,而不能杀死两个“子”线程。