如何判断线程是否正在执行

shypzms 2013-10-26 05:42:16
void CInterfacePcommDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
DWORD isThread;
GetExitCodeThread(hThread,&isThread);
if (STILL_ACTIVE == isThread)
{
AfxMessageBox("已经运行!");
return;
}
else
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)setImage(),NULL,0,NULL);
}


我希望按下按钮之后先判断进程是否已经执行。HANDLE hThread是全局变量,setImage()是一个包含while循环的函数。
现在的问题是每次按下按钮都检测不到线程已经运行,请问是什么原因呢?
...全文
283 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dangers_boys 2013-10-29
  • 打赏
  • 举报
回复
GetThreadExitCode 如果ExitCode是259的话,表示尚未退出
_free 2013-10-28
  • 打赏
  • 举报
回复
引用 5 楼 shypzms 的回复:
[quote=引用 4 楼 bai_cai_00 的回复:] CreateThread里面传入的应该是线程处理函数的名字,而你却在函数名后加上了一对括号,这样的代码能编译通过吗?我记得线程处理函数是有一个参数的,我把多余的括号去掉就能检测到了
i 为啥我把括号去掉就编译不过去了呢? error C2440: “类型转换”: 无法从“overloaded-function”转换为“LPTHREAD_START_ROUTINE”[/quote] 你函数重载过吧, 定义一个唯一的函数名试试
shypzms 2013-10-28
  • 打赏
  • 举报
回复
引用 4 楼 bai_cai_00 的回复:
CreateThread里面传入的应该是线程处理函数的名字,而你却在函数名后加上了一对括号,这样的代码能编译通过吗?我记得线程处理函数是有一个参数的,我把多余的括号去掉就能检测到了
为啥我把括号去掉就编译不过去了呢? error C2440: “类型转换”: 无法从“overloaded-function”转换为“LPTHREAD_START_ROUTINE”
bai_cai_00 2013-10-27
  • 打赏
  • 举报
回复
CreateThread里面传入的应该是线程处理函数的名字,而你却在函数名后加上了一对括号,这样的代码能编译通过吗?我记得线程处理函数是有一个参数的,我把多余的括号去掉就能检测到了
shypzms 2013-10-27
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
Create 时: CREATE_SUSPENDED 点击时 : Resume
可以详细点吗?
_free 2013-10-26
  • 打赏
  • 举报
回复
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)setImage(),NULL,0,NULL); 多写个小括号吧 hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)setImage,NULL,0,NULL);
schlafenhamster 2013-10-26
  • 打赏
  • 举报
回复
Create 时: CREATE_SUSPENDED 点击时 : Resume

15,471

社区成员

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

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