m_hThread = CreateThread(NULL,0,ThreadProcess,this,CREATE_SUSPENDED,NULL);
中间有定时器timeSetEvent(),间隔一个毫秒,调用一次回调函数,在回调函数中执行一次线程的唤醒动作
void CMainFrm::TimeCallBack()
{
................代码处理段
ResumeThread(m_hThread);
}
DWORD _stdcall ThreadProcess()
{
..............代码处理段
AfxMessageBox("线程被唤醒");
//处理完成后
SuspendThread(m_hThread);
return 0;
}
我的问题是:程序进来后,线程被唤醒了一次,再往后执行,就没有被唤醒了!我感觉是挂起时没有被挂起,所以后面的唤醒就无效了!求各路高手指点!
11 个解决方案
#1
线程中没有while或for循环,执行完一次线程不就退出了?
#2
你那个不叫线程
#3
是事件对象,CreateEvent();线程中WaitForSingleObject
#4
我的循环是外部的定时保证的啊,用timeSetEvent(),每隔一个毫秒调用一次回调函数,然后在回调里面对线程再次唤醒!这样反复不行?
#5
必须用事件对象?我看到一个简单的例子,他们做的就是CreateThread();
然后,后面就是直接对线程句柄的挂起和唤醒及终止操作!很简单的啊,有点费解了
#6
求指教
#7
’间隔一个毫秒‘太短了吧? 改100毫秒试试。
#8
‘ResumeThread(m_hThread);’
‘SuspendThread(m_hThread);’
为什么都不检查返回值?
‘SuspendThread(m_hThread);’
为什么都不检查返回值?
#9
你的循环只是唤醒操作,并没有重新启动线程啊
当线程第一次被唤醒后,会显示messagebox,然后又将自己挂起了
单簧管第二次被唤醒,则执行了return 0的操作,线程退出
此时线程句柄没有关闭,所以内核对象依然存在,只是线程已经结束运行了
只等着你关闭句柄后就释放线程内核对象了
#10
呵呵,楼主仔细想想吧,你这个流程是不是有点问题。。。画个流程图啥的你就明白啦
你创建了个线程,然后挂起,通过定时器去唤醒,然后呢?然后线程执行完功能之后再挂起,
再然后呢?再然后线程就执行完啦!!!问题就在这,所以楼上有人说while循环什么的去执行
你创建了个线程,然后挂起,通过定时器去唤醒,然后呢?然后线程执行完功能之后再挂起,
再然后呢?再然后线程就执行完啦!!!问题就在这,所以楼上有人说while循环什么的去执行
#11
呵呵!非常感谢各位的指点!问题已经得到解决!就是要在线程里面写循环,否则线程执行一次就退出了!大家要小心哟
#1
线程中没有while或for循环,执行完一次线程不就退出了?
#2
你那个不叫线程
#3
是事件对象,CreateEvent();线程中WaitForSingleObject
#4
我的循环是外部的定时保证的啊,用timeSetEvent(),每隔一个毫秒调用一次回调函数,然后在回调里面对线程再次唤醒!这样反复不行?
#5
必须用事件对象?我看到一个简单的例子,他们做的就是CreateThread();
然后,后面就是直接对线程句柄的挂起和唤醒及终止操作!很简单的啊,有点费解了
#6
求指教
#7
’间隔一个毫秒‘太短了吧? 改100毫秒试试。
#8
‘ResumeThread(m_hThread);’
‘SuspendThread(m_hThread);’
为什么都不检查返回值?
‘SuspendThread(m_hThread);’
为什么都不检查返回值?
#9
你的循环只是唤醒操作,并没有重新启动线程啊
当线程第一次被唤醒后,会显示messagebox,然后又将自己挂起了
单簧管第二次被唤醒,则执行了return 0的操作,线程退出
此时线程句柄没有关闭,所以内核对象依然存在,只是线程已经结束运行了
只等着你关闭句柄后就释放线程内核对象了
#10
呵呵,楼主仔细想想吧,你这个流程是不是有点问题。。。画个流程图啥的你就明白啦
你创建了个线程,然后挂起,通过定时器去唤醒,然后呢?然后线程执行完功能之后再挂起,
再然后呢?再然后线程就执行完啦!!!问题就在这,所以楼上有人说while循环什么的去执行
你创建了个线程,然后挂起,通过定时器去唤醒,然后呢?然后线程执行完功能之后再挂起,
再然后呢?再然后线程就执行完啦!!!问题就在这,所以楼上有人说while循环什么的去执行
#11
呵呵!非常感谢各位的指点!问题已经得到解决!就是要在线程里面写循环,否则线程执行一次就退出了!大家要小心哟