调试和运行时的现象不同

程序心声 2019-08-01 06:46:32
大家好,我有一个疑难问题,咨询一下大家。我有一个程序,判断新创建的线程,是否挂起。如果挂起的话,弹一个提示框,表示条件满足。但是我明明挂起了程序,提示框就是没弹。于是做调试,结果却很意外,只要是调试的时候,程序就和预计的一模一样,弹出了提示框。但只要是运行状态,提示框就没有,奇怪的很。这是怎么回事啊,调试和运行程序并没有变化啊,也不应该有区别啊。AfxMessageBox和MessageBox也经常用,也没有什么异常情况啊。从来没遇到过这种怪事,谁能告诉我怎么回事呢?下面是代码:

g_pThread->SuspendThread(); //挂起线程

int nPid = _getpid();
BOOL bRET = IsThreadSuspend(nPid, g_pThread->m_nThreadID); //判断线程挂起的函数,之前验证过,没有问题
if (bRET)
{
AfxMessageBox("线程被挂起了!");
MessageBox("线程被挂起了!");
}
弹不弹提示框不重要,提示框只是告诉我程序走到哪了,关键是为什么会有不同。IsThreadSuspend这个函数我是验证过的,在其他程序直接运行,是正常的。
...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序心声 2019-08-03
  • 打赏
  • 举报
回复
引用 4 楼 Eleven 的回复:
调用SuspendThread(),该函数的返回值表示之前的挂起计数。

你说的挂起计数是在本程序内,那我要是在另外一个程序里作判断呢。挂起计数不重要,我是想知道,为什么调试和运行,程序显示不一致。那我挂起到底成功了没有。成功了为什么 IsThreadSuspend 这个函数没有识别到
schlafenhamster 2019-08-02
  • 打赏
  • 举报
回复
搜索“SuspendThread()”
Eleven 2019-08-02
  • 打赏
  • 举报
回复
调用SuspendThread(),该函数的返回值表示之前的挂起计数。
程序心声 2019-08-01
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
This function is primarily designed for use by debuggers. It is not intended to be used for thread synchronization.

1. 我之前做过实验。有两个程序,一个程序里,一个新线程用SuspendThread()挂起了。另一个程序,用我后面的IsThreadSuspend函数判断成功了啊。两个程序分别是两个进程。那这为什么就可以呢?
2. 如果你觉得SuspendThread函数不能用,那我要让线程暂停,该怎么办。
schlafenhamster 2019-08-01
  • 打赏
  • 举报
回复
This function is primarily designed for use by debuggers. It is not intended to be used for thread synchronization.

15,979

社区成员

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

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