Visual c++ MFC/Activex并启动它';waitforsingleobject之后的evnet
我的项目是一个包含事件的对话框库和activeX容器。 当我调用activex的一个函数并等待触发它的事件(使用WaitForSingleObject)时,应用程序停止,事件直到超时才发生,在超时后它将发生Visual c++ MFC/Activex并启动它';waitforsingleobject之后的evnet,visual-c++,Visual C++,我的项目是一个包含事件的对话框库和activeX容器。 当我调用activex的一个函数并等待触发它的事件(使用WaitForSingleObject)时,应用程序停止,事件直到超时才发生,在超时后它将发生 void COcxTesDlg::OnBnClickedButton1() { hEvent = CreateEvent(NULL, TRUE, FALSE, L"testEvent"); ocxObj.ocxFunction(); DWORD res = ::WaitForSingleOb
void COcxTesDlg::OnBnClickedButton1()
{
hEvent = CreateEvent(NULL, TRUE, FALSE, L"testEvent");
ocxObj.ocxFunction();
DWORD res = ::WaitForSingleObject(hEvent, 10000);
if(res != WAIT_OBJECT_0)
AfxMessageBox(L"Time Out");
else
AfxMessageBox(L"before Time Out");
//--- to do some works after ocx event
//---
}
void COcxTesDlg::ocxEventFunc()
{
SetEvent(hEvent);
}
我总是看到“超时”消息框,但如果我不调用WaitForSingleObject(),则ocxEventFunc()发生的时间会早于1000毫秒
我想在活动结束后做一些工作,不用等太久。
请帮帮我。当然了:你让你的程序等待,它也在等待 根据您对试图执行的操作的描述,您的设计从根本上被破坏了:您在一个消息处理程序中,在主线程中,您调用了
WaitForSingleObject
。这将暂停该线程的执行,该线程将处理所有用户界面(如果只有一个线程,则会处理您的程序),直到发出事件信号或超时过期为止
你应该重新考虑你的设计。如果不了解更多,就不容易提出替代方案。一种可能性是:
记下开始时间(例如,调用GetTickCountEx
并存储结果)
循环时
开始时间-当前时间
值。在循环内部调用WaitForSingleObject
,并使用0
指定超时。该调用不会阻塞,并将立即返回:如果返回WAIT\u OBJECT\u 0
,则OCX已完成。如果返回WAIT\u TIMEOUT
,则表示OCX尚未完成。然后,您可以做任何您想做的工作。您已经有了一个在事件发生时调用的函数。使用它
void COcxTesDlg::OnBnClickedButton1()
{
ocxObj.ocxFunction();
}
void COcxTesDlg::ocxEventFunc()
{
//--- to do some works after ocx event
//---
}
我需要一些对象,做一些工作,它们只需在“OnBnClickedButton1”功能中即可访问。然后我不能在事件函数中编写'some works'代码,而是调用waitforsingleobject,我调用AfxMessageBox(L“Please wait…”),这不会使对话框事件停止,然后我的ocx事件发生。ocx事件后,用户可以关闭消息框。