在第一次调用它完成执行后,这是我的发送者线程。我无法恢复此发件人帖子。 C ++中是否有任何恢复线程的机制。
void ClientSocket::sender()
{
char buf[1024];
//readBuffer = m_ptrsendStream->Read_Adt(filePath);
//readStream();
//cout << readBuffer.str()<<endl;
cout << "write stream to send through socket\n" << endl;
cin >> buf;
if (isConnected == 0)
{
//send(clientSock, readBuffer.str().c_str(), strlen((char *)readBuffer.str().c_str()), 0);
send(clientSock, buf, strlen(buf), 0);
cout << "sending stream :\n"<<endl << buf << endl;
}
}
//this is where my thread creation happens and join() happens.
int main(int argc, char *argv[])
{
ClientSocket objSocket(argv[1]);
sender_thread = make_shared<thread>([&objSocket]() {
objSocket.sender();
});
try
{
if (sender_thread->joinable())
sender_thread->join();
}
答案 0 :(得分:4)
不,一旦你的线程加入了它就完成了,你需要创建一个新的。
如果您有这种模式,您不断创建新线程,那么考虑使用线程池来避免不断产生新线程的开销可能是值得的。
此外,如果这与网络有关,最好避免使用线程,而是使用像boost::asio这样的异步。
答案 1 :(得分:3)
终止线程无法恢复(这不是C ++限制,而是一般限制;当谈到恢复线程时,通常是在先前挂起它后恢复)。
join()返回后,相应的线程已经终止;它没有状态(除了zobmie的东西和返回代码,但这对你的目的没有用),没有什么可以恢复
但是,可以在另一个线程中运行sender()函数,只需创建线程的另一个实例。
编辑:我同意@inf尽可能使用asio代替线程。
答案 2 :(得分:0)
你想要完成的简历线程,通常使用的线程恢复从挂起的线程继续。而不是恢复线程,停止线程un直到它完成所有操作,利用while或等待线程。