关于线程不干活的问题???

Tiger2114 2006-02-20 11:26:12
同一个线程类,同时创建了三个线程实例,但是,运行一段时间后(几天或一月),某个线程就没有相应了,其他线程都没有问题,不知是什么原因,请高手诊断一下,谢谢!
...全文
277 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
做鸡真好吃 2006-05-09
  • 打赏
  • 举报
回复
关注中~
iceheart 2006-05-06
  • 打赏
  • 举报
回复
用 _beginThread创建的吧?
C200501111 2006-05-06
  • 打赏
  • 举报
回复
和楼主同样的问题,我的程序是多进程的,一个主进程负责管理和任务分配,但工作一天候,就有一个工作进程没有反应了,不知道楼主是如何解决的?交流一下?
QQ:36367977
veryfatman 2006-05-05
  • 打赏
  • 举报
回复
做个记号,下次研究OutputDebugString等debug函数。

UDX协议 2006-05-04
  • 打赏
  • 举报
回复
很正常,你的线程,中间自己异常退出了。
估计用了过多的try catch,导致异常退出也没有把应用程序crash掉。
pripor 2006-05-03
  • 打赏
  • 举报
回复
估计是同步逻辑的问题吧
你说的也太笼统了,盖茨来了也说不准啊
mynamelj 2006-05-03
  • 打赏
  • 举报
回复
线程是不是反回了?
会思考的草 2006-05-03
  • 打赏
  • 举报
回复
死锁了?
roscoe 2006-05-03
  • 打赏
  • 举报
回复

UINT CMyThr::ThreadProc( VOID* pArgv )
{
struct _LocalInit
{
CMyThr * m_p;
_LocalInit( CMyThr * p ):m_p(p)
{
.... // Write Thread Start Log
}
~_LocalInit()
{
... // Write Thread Term
}
} localinit((CMyThr*)pArgv );

// thread process
}
//
在线程函数内做Log.
不过你这个似是用了WinThread,那个ExitInstance是在WM_QUIT时|Initiance失败时 调用.
gushenghua 2006-04-30
  • 打赏
  • 举报
回复
皮鞭
billy145533 2006-02-23
  • 打赏
  • 举报
回复
检查
caferd 2006-02-23
  • 打赏
  • 举报
回复
你处理线程LOCK会不会出问题了,线程一直LOCK掉了
Tiger2114 2006-02-22
  • 打赏
  • 举报
回复
谢谢大家的指点,今天该问题又重现了一次,这次,我让用户去查看该进程的线程数,发现少了两个线程,因此我又怀疑是不干活的线程已经退出,但是我在ExitInstance里边有打印,可是查看日志,里边并没有线程退出的信息,于是我迷惑了??????

还有一个问题比较迷惑,就是该进程中,运行以后一共有14个线程,出问题后就少了两个线程,如何检测线程是否运行,以及线程是否已经挂起,如果挂起,应该如何激活???请大家指点一下,谢谢!
property1 2006-02-22
  • 打赏
  • 举报
回复
jf
DentistryDoctor 2006-02-22
  • 打赏
  • 举报
回复
如果只是没有响应,而不是终止,应该是什么地方死锁了。但得看你的具体代码了。
charles_y 2006-02-21
  • 打赏
  • 举报
回复
程序出问题了呗。

检查一下程序逻辑
或者也可能是内存操作出问题了
mythay 2006-02-21
  • 打赏
  • 举报
回复
内存出错的可能性大,是否所有的new 你都检查返回值,或者捕捉异常了?
danielzhu 2006-02-21
  • 打赏
  • 举报
回复
void gDebugMsg(CString szStr)
{
#ifdef _ZXH_DEBUG
TCHAR szDebugInfo[2560];
wsprintf(szDebugInfo, "%s\n", szStr);
OutputDebugString(szDebugInfo);
#endif
}

这是我用DebugView的时候,用来显示调试日志的函数
danielzhu 2006-02-21
  • 打赏
  • 举报
回复
建议调试线程,按如下方法操作:
1.建立日志:在线程里边,每一步骤,都使用用字符串标识运行到了什么地方,下一步该做什么了,同时记录下时间。
2.保存日志:
(1)如果你的线程要运行能够很长时间才出问题,那么就把上面的日志,写到一个日志文件中去。等程序出了问题,你就看日志文件。
(2)如果时间比较短就出问题,那么就直接用OutputDebugString函数输出,用DebugView来捕捉日志信息。

通过详细的分析,应该会查得出来

一个傻冒 2006-02-21
  • 打赏
  • 举报
回复
可能是其中某个线程一直等待消息.或者需要的数据.
加载更多回复(2)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧