小弟在做一个拦截SMS短信的功能。计划由外部调用dll中的以下函数:EXTERN_C BOOL SMSMessageAvailable (wchar_t *lpDestination, wchar_t *lpPhoneNr)
{
MessageBox(NULL,L"SMSMessageAvailable!",L"001",MB_ICONINFORMATION|MB_OK);
WaitForSingleObject(g_hClientEvent, INFINITE);
.......
}在DLL中有一个函数会引发SetEvent(g_hClientEvent)
HRESULT CMailRuleClient::ProcessMessage(...)
{
...
SetEvent(g_hClientEvent);
...
}但实际运行时完全不行。首先在外部调用SMSMessageAvailable,运行至WaitForSingleObject(g_hClientEvent, INFINITE)这一行即被挂起。接收到短信后,ProcessMessage函数自动开始运行,运行至SetEvent(g_hClientEvent)后,SMSMessageAvailable函数仍被挂起,并未继续运行。请教各位高手,这到底是什么原因呢?
{
MessageBox(NULL,L"SMSMessageAvailable!",L"001",MB_ICONINFORMATION|MB_OK);
WaitForSingleObject(g_hClientEvent, INFINITE);
.......
}在DLL中有一个函数会引发SetEvent(g_hClientEvent)
HRESULT CMailRuleClient::ProcessMessage(...)
{
...
SetEvent(g_hClientEvent);
...
}但实际运行时完全不行。首先在外部调用SMSMessageAvailable,运行至WaitForSingleObject(g_hClientEvent, INFINITE)这一行即被挂起。接收到短信后,ProcessMessage函数自动开始运行,运行至SetEvent(g_hClientEvent)后,SMSMessageAvailable函数仍被挂起,并未继续运行。请教各位高手,这到底是什么原因呢?
2. 换用 SleepConditionVariable WakeConditionVariable试试(vista之后才有)
3. 换用 semphore 信号量为1, 试试。
4. 还有其他机制,都试试, 我想不起来了,关于同步的机制都试试。
如果你在等待到事件信号后,没有将计数减1,那么WaitForSingleObject永远不会返回事件处于有信号状态。