首页| 论坛| 消息

标题:线程不能销毁,求助
作者:mugua001
日期:2021-09-02 19:53
内容:

每次收到数据,就创建新线程,结果 客户端 断开连接,线程依然在。
若是 加上 //subThreadContainer->quit();//subThreadContainer->exit();监听程序直接没了,进程直接消失(WIN10)。
如何正确地销毁 临时创建的线程呢?

//---------------------------------------------------------------------------------------------------
void psw_edit_v2_server::socket_Read_Data_slot()
{
//收到数据
//发送线程信号emit openThreadSignal();创建新线程处理;

emit openThreadSignal(socket001, cipherStr);//触发openThreadSlot()创建绑定线程,将数据处理任务交给线程完成;

}

void psw_edit_v2_server::openThreadSlot(QTcpSocket *dstClientTcpSocket, QString msgText)
{
/*开启绑定一条多线程*/
qDebug() moveToThread(subThreadContainer);//将创建的对象移到线程容器中


//connect(subThreadContainer, SIGNAL(execThreadFun()), myObjectThread, SLOT(execThreadSlot()));//启动线程中槽函数执行耗时任务;
connect(this, &psw_edit_v2_server::execThreadFun, myObjectThread, &MyWorkThreadQtEh::execThreadSlot);

connect(subThreadContainer, SIGNAL(finished()), myObjectThread, SLOT(deleteLater())); //终止线程时要调用deleteLater槽函数
connect(subThreadContainer, SIGNAL(finished()), subThreadContainer, SLOT(deleteLater()));

connect(subThreadContainer, SIGNAL(finished()), this, SLOT(deleteLater()));//可选 ..


#1 [20091001753 09-02 20:30]
当你提问的时候,如果直接贴一大段代码,其实没人会仔细去看,那就更没人来回答。
你可以尝试归纳总结问题,然后再提问。
#2 回 20091001753 的帖子 [mugua001 09-02 20:54]
20091001753:当你提问的时候,如果直接贴一大段代码,其实没人会仔细去看,那就更没人来回答。
你可以尝试归纳总结问题,然后再提问。 (2021-09-02 20:30) 
谢谢!
前面三行文字描述,就是问题所在。
附代码,是方便各位大神诊断。
#3 [tanyue.esec 09-03 08:42]
我自己的办法是,在创建线程的主线程类的析构函数中,停止子线程的工作,调用子线程的wait函数。
然后让子线程停止工作也是需要的,我之前就是没有停止工作,界面都消失了,子线程还在不停的循环
#4 回 tanyue.esec 的帖子 [mugua001 09-03 09:40]
tanyue.esec:我自己的办法是,在创建线程的主线程类的析构函数中,停止子线程的工作,调用子线程的wait函数。
然后让子线程停止工作也是需要的,我之前就是没有停止工作,界面都消失了,子线程还在不停的循环 (2021-09-03 08:42)
我也试过 线程 的 wait(),但是 程序直接 一次性就退出了,而不是线程 结束。

会不会是 我用的位置不对?(我结束子线程的操作是 在主线程中进行的……应该在子线程内部进行么?)
-------------------------------------
void psw_edit_v2_server::closeThreadSlot()
{
qDebug() isRunning())
{
//myObjectThread->closeThread();//关闭线程槽函数
//subThreadContainer->quit();//退出事件循环
subThreadContainer->wait();//释放线程槽函数资源
//subThreadContainer->terminate();
}
}
#5 [九重水 09-03 10:10]
关心销毁线程之前,先关心一下:
1,为什么你要临时创建线程;
2,为什么创建线程之后你又迫不及待地销毁它?
在一个程序中,线程不是越多越好,也不是随时创建和销毁就是好的。
其实,你可以开局就创建合适的线程,然后需要的时候从中分配一个线程过去,用完就回收(不是销毁)

<< 1 2 >> (1/2)

回复 发表
主题 版块