社区
进程/线程/DLL
帖子详情
线程退出的问题
victor_cui
2010-04-23 06:02:14
我写了一个多线程程序,调试发现线程函数已经正常返回,但是在主线程join 等待线程结束还是返回timeout,不知道啥缘故
...全文
269
21
打赏
收藏
线程退出的问题
我写了一个多线程程序,调试发现线程函数已经正常返回,但是在主线程join 等待线程结束还是返回timeout,不知道啥缘故
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
victor_cui
2010-05-04
打赏
举报
回复
关键是我的模块是出于最底层,被很多不同的模块调用,用的是显式load,有的是隐式,所以不得已在atexist里面注册了清理函数。感觉这个函数是在process detach里面运行的,这个时候线程状态已经很怪异了, 所以使用waitsingleobject并不能得到函数的退出状态
gg606
2010-04-30
打赏
举报
回复
感觉LZ使用线程的习惯似乎与本人很是不同,而且LZ的代码我也没看太明白,atexit也不知是什么东东。所以不好说什么了。
尹成
2010-04-29
打赏
举报
回复
你用了WatiForSingleObject等一些等待函数吧,如果是那么你线程结束前,设置了等待的东西没哟
candy_huang11
2010-04-29
打赏
举报
回复
[Quote=引用 16 楼 victor_cui 的回复:]
原因查明,是因为我再atexist里面停止的线程,如果我在代码中显式的停止线程就不会有这个问题,但是底层的原因还是不明了,并且我的程序因为牵扯到很多模块,所以不得已才在atexit当中调用,所以请问高手有什么办法避免这个问题呢
[/Quote]
你这属于线程间的竞争了,应该处理的是设计的问题
victor_cui
2010-04-29
打赏
举报
回复
原因查明,是因为我再atexist里面停止的线程,如果我在代码中显式的停止线程就不会有这个问题,但是底层的原因还是不明了,并且我的程序因为牵扯到很多模块,所以不得已才在atexit当中调用,所以请问高手有什么办法避免这个问题呢
liwei3290
2010-04-29
打赏
举报
回复
建立个线程退出事件 event
线程WaitForSingleObject(event,0)
如果等到就 break 退出
这样你想退出线程 EetEvent(event)就可以了
mszjk
2010-04-28
打赏
举报
回复
C++啊C++......
red-fly
2010-04-28
打赏
举报
回复
应该是程序有问题,我也有遇到过这种问题,但后来没有真正解决,期待有高人回复
victor_cui
2010-04-28
打赏
举报
回复
高手请进啊
victor_cui
2010-04-26
打赏
举报
回复
我用_beginthreadex 创建 线程,在线程函数返回的地方执行_endthread
victor_cui
2010-04-26
打赏
举报
回复
我有waitforsingleobject 等待线程句柄,返回超时,并且可以确认的是线程函数已经返回
victor_cui
2010-04-26
打赏
举报
回复
ACmThread *pThread = static_cast<ACmThread *>(aPara);
CM_ASSERTE_RETURN(pThread, NULL);
pThread->OnThreadInit();
if (pThread->m_Type != CCmThreadManager::TT_MAIN) {
CM_ASSERTE(pThread->m_pEvent4Start);
if (pThread->m_pEvent4Start)
pThread->m_pEvent4Start->Signal();
}
pThread->OnThreadRun();
if (CM_BIT_DISABLED(pThread->m_Flag, CCmThreadManager::TF_JOINABLE) &&
++pThread->m_NeedDelete >= 2)
{
delete pThread;
}
#ifdef CM_WIN32
::_endthread(); // 已经执行
#endif // CM_WIN32
return NULL;
-----------------
DWORD dwRet = ::WaitForSingleObject(m_Handle, 100);
if (dwRet == WAIT_OBJECT_0)
return CM_OK;
else if (dwRet == WAIT_TIMEOUT) {
CM_WARNING_TRACE_THIS("ACmThread::Join, WaitForSingleObject() timeout!"); //总是到这里
TerminateThread(m_Handle, 123);
return CM_ERROR_TIMEOUT;
}
else {
CM_ERROR_TRACE_THIS("ACmThread::Join, WaitForSingleObject() failed! err=" << ::GetLastError());
return CM_ERROR_FAILURE;
}
victor_cui
2010-04-26
打赏
举报
回复
m_Handle = (HANDLE)::_beginthreadex(
NULL,
0,
ThreadProc,
this,
0,
(unsigned int *)(&m_Tid));
if (m_Handle == 0) {
CM_ERROR_TRACE_THIS("ACmThread::Create, _beginthreadex() failed! err=" << errno);
return CM_ERROR_UNEXPECTED;
}
创建
gg606
2010-04-26
打赏
举报
回复
不应该呀!贴点代码出来看看
songtao_01
2010-04-24
打赏
举报
回复
超时返回?
你是不是用了WatiForSingleObject等一些等待函数啊,如果是那么你线程结束前,设置了等待的东西没哟(比如用SetEvent设置事件,让WatiForSingleObject返回)
AIHANZI
2010-04-24
打赏
举报
回复
死锁问题。。。
用WatiForSingleObject,再用TermiateThread()干掉它
wb_rock
2010-04-23
打赏
举报
回复
学习ing
ccc_cgreen
2010-04-23
打赏
举报
回复
如果你是afxbegingthread在线程退出之前在线程里面调用一下afxendthread.
tanwei1002
2010-04-23
打赏
举报
回复
有可能死锁
见习学术士
2010-04-23
打赏
举报
回复
检查是不是线程与窗口消息循环死锁了。
加载更多回复(1)
python多
线程
中无限循环
线程
退出
问题
python多
线程
中无限循环
线程
退出
问题
import threading import time """
问题
:在创建一个包含无限循环的子
线程
的时候 无法控制子
线程
的
退出
第一次在写树莓派应用的时候就出现了这个
问题
这次在写网络编程大作业...
线程
退出
和
线程
资源回收
问题
最近项目中遇到循环8M的内存泄漏
问题
,排查后发现是由于特殊场景下使子
线程
异常
退出
,主
线程
发现子
线程
...下面来看看关于
线程
退出
和
线程
资源回收的有关
问题
线程
退出
有多种方式,如return,pthread_exit,pthread_ca
线程
控制:
线程
退出
、
线程
等待
线程
退出
我们来看下面这段代码, 运行之后: 为什么没有走进普通
线程
的循环,而是
退出
了呢? 这就就要说的第一点: 主
线程
main中return 0
退出
的是进程,不是
线程
!
线程
退出
接口: void pthread_exit(void* ...
python主
线程
关闭
问题
(tkinter界面关闭卡顿,python主
线程
关闭子
线程
退出
问题
)
但是python的主
线程
销毁,需要等待子
线程
结束,因为主
线程
在子
线程
结束之前
退出
解决策略: 将子
线程
设置为被守护进程,主
线程
设置为守护进程,伴随着主
线程
的结束子
线程
结束 所以应该这样使用 t.setDaemon(True)...
多
线程
——
线程
的
退出
退出
以下几种方式均可以让
线程
退出
,但是相互间也是有区别的,下面通过实例来演示。 pthread_exit函数用于实现
线程
退出
头文件#include<pthread.h> 函数原型void pthread_exit(void *retval); 无返回值 ...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章