解决方案 »
- VC 调用VB写的COM的问题,有个类不知从哪里声明而来。
- 虚 心 请 教 能 玩 转 VC 者 ! !
- 谁知道有没有相应的API可将符号<编码成<
- 那里有mks toolkit 的下载?高分求。教育网上的不行。
- 关于_variant_t返回值
- !!!!!!关于List的问题,在线等待ing!!!!!!!!!!!!!!!!
- CDC指针的问题
- fatal error LNK1104: cannot open file "Debug/TaskKeyHook.lib"
- 获取像素点颜色问题
- 编译通过后,执行程序时出错!! 请问出现以下的错误的原因!!
- 如何撒消多个已发送的自定义消息
- C#工程如何添加64位的OCX组件
当有新数据插入时SetEvent,当为空时ResetEvent
GetCurrentThreadId();
Sorry,我错了。一开始对CreateEvent 的自动手动不是很理解,现在貌似可以了,谢谢!!
--------------------------------------------------------------------------------------------------------------------------
你的工作线程不是共用一个线程函数吗?再说,当这些工作线程都激活之后,也不可能是并行处理的,因为他们的处理函数是同一个,并行处理会乱掉的,必须控制互斥!HEVENT __hEvent__ = ::CreateEvent(NULL, TRUE, FALSE, NULL) //手动重置,初始无信号
CRITICAL_SECTION __cs__={0}; //用于控制工作线程间互斥
InitializeCriticalSection(&__cs__);
BOOL bFlag = FALSE; //工作线程是否已处理过DWORD WINAPI WorkerProc(LPVOID lParam)
{
if(!bFlag)
{
::WaitForSingleObject(__hEvent__ ,INFINITE); //当有新数据插入时手动置为有信号,bFlag = FALSE;
do
{
if(bFlag) //双重检测
{
::EnterCriticalSection(&__cs__);
...........
...........
::LeaveCriticalSection(&__cs__);
bFlag = TRUE;
}
}while(0);
//ResetEvent(__hEvent__ );
}
return 0;
}::CloseHandle(__hEvent__ );
::DeleteCriticalSection(&__cs__);
HEVENT __hEvent__ = ::CreateEvent(NULL, TRUE, FALSE, NULL) //手动重置,初始无信号
CRITICAL_SECTION __cs__={0}; //用于控制工作线程间互斥
InitializeCriticalSection(&__cs__);
BOOL bFlag = FALSE; //工作线程是否已处理过DWORD WINAPI WorkerProc(LPVOID lParam)
{
if(!bFlag)
{
::WaitForSingleObject(__hEvent__ ,INFINITE); //当有新数据插入时手动置为有信号,bFlag = FALSE;
do
{
if(bFlag) //双重检测
{
::EnterCriticalSection(&__cs__);
//...........
//...........
::LeaveCriticalSection(&__cs__);
bFlag = TRUE;
}
}while(0);
//ResetEvent(__hEvent__ );
}
return 0;
}::CloseHandle(__hEvent__ );
::DeleteCriticalSection(&__cs__);
{
::EnterCriticalSection(&__cs__);
//...........
//...........
::LeaveCriticalSection(&__cs__);
bFlag = TRUE;
}
这个逻辑有没有问题,如果bFlag为真,运行判断并置bFlag为真
{
::EnterCriticalSection(&__cs__);
//...........
//...........
::LeaveCriticalSection(&__cs__);
bFlag = TRUE;
}
这个逻辑有没有问题,如果bFlag为真,运行判断并置bFlag为真错了错了,少个!
if(!bFlag) //双重检测