HANDLE threads= (HANDLE)_beginthread( Bounce, 。。);
HANDLE threads1 = (HANDLE)_beginthread( CheckKey, 。。 );
void CheckKey( void *dummy )
{
while(1)
{
WaitForSingleObject(threads,INFINITE);
Sleep(300);
ResetEvent(threads);
printf("CheckKey the temp is \n");
}
}
void Bounce( void *ch )
{
Sleep(1000);
printf("Bounce\n");}
我把这个简易的代码大概说一下,就是通过WaitForSingleObject 来保证让Bounce这个函数先执行,它执行完了之后CheckKey再执行,但是,现在出现个问题,就是threads 这个句柄怎么始终是有信号装状态啊,我用ResetEvent(threads)之后,当下一次循环进来的时候WaitForSingleObject依然能往下执行。
请问我怎么做才能让这个threads句柄编程无信号状态呢?
HANDLE threads1 = (HANDLE)_beginthread( CheckKey, 。。 );
void CheckKey( void *dummy )
{
while(1)
{
WaitForSingleObject(threads,INFINITE);
Sleep(300);
ResetEvent(threads);
printf("CheckKey the temp is \n");
}
}
void Bounce( void *ch )
{
Sleep(1000);
printf("Bounce\n");}
我把这个简易的代码大概说一下,就是通过WaitForSingleObject 来保证让Bounce这个函数先执行,它执行完了之后CheckKey再执行,但是,现在出现个问题,就是threads 这个句柄怎么始终是有信号装状态啊,我用ResetEvent(threads)之后,当下一次循环进来的时候WaitForSingleObject依然能往下执行。
请问我怎么做才能让这个threads句柄编程无信号状态呢?
解决方案 »
- 自定义Webbrowser 导致快捷键失效的问题?
- 关于对话框 右键菜单的问题,急。。请各位帮帮忙
- 请问谁有on vip7的解码库?或者相关的资料,介绍我
- CObject类的作用,为什么要从CObject 类继承
- 怎样添加基于CRecordset 类的类??
- Ctrl+C是不是能够结束线程?
- win32下(不用mfc)怎样不借助direct实现多声道音频音量的控制调节?
- 请问大虾们,两个人两个星期,写一个最基本的带聊天和文件传输功能的模范QQ的聊天软件,能达到什么程度?
- (MSDN Downloads的)PlatForm SDK 2001.11 的PSDK-FULL.12.cab文件损坏,其他哪里可以下载?
- 关于IE浏览器的调用》
- 类成员回调函数问题?
- vc6 mfc连接mysql中文乱码
换一种展开线程的方法,展开后resume
或者在Bounce后再展开CheckKey线程
或者在CheckKey线程里等待事件
HANDLE handleSemaphore = CreateSemaphore(NULL,0,1,NULL);DWORD result=WaitForSingleObject(handleSemaphore,INFINITE);
ReleaseSemaphore(handleSemaphore,1,NULL);
请问我怎么做才能让这个threads句柄编程无信号状态呢?
=========
对于线程内核对象来说,并不用ResetEvent来设置它的信号。
当线程未结束时,它没有信号,当线程结束之后,它就有信号。
BOOL WINAPI ResetEvent(
__in HANDLE hEvent
);Parameters
hEvent
A handle to the event object. The CreateEvent or OpenEvent function returns this handle. 很显然,GetLastError函数返回无效的句柄
另外ResetEvent用法不对啊。它是针对事件句柄的啊。你的问题就是线程同步,用事件吧。
2.threads的信号不是你人为设置的,它是随线程状态变化的,线程执行时为无信号,线程返回后为有信号
给你个例子:
m_hThread = CreateThread(NULL, 0, ThreadProc, 0, CREATE_SUSPENDED, NULL); SetThreadPriority(m_hThread, THREAD_PRIORITY_TIME_CRITICAL);
ResumeThread(m_hThread);
给你个例子:
m_hThread = CreateThread(NULL, 0, ThreadProc, 0, CREATE_SUSPENDED, NULL);SetThreadPriority(m_hThread, THREAD_PRIORITY_TIME_CRITICAL);
ResumeThread(m_hThread);