通过NotifyChangeEventLog获取到最新的日志事件句柄hEvent后,如何通过这个句柄来获得事件的具体信息呢?或者有其它好的办法也可以,谢谢!
解决方案 »
- 如何实现服务器自动控制局域网内每一台机器的网络通断?
- Bitmap save函数里,第三个参数,如何设置,才能对图片进行压缩呢?
- 谁有下载ADO书籍的地址? 小弟谢啦!
- 一个奇怪的事!在对话框中加入一个CTreeCtrl控件并要其显示图标,只有把CImageList声明为成员变量,CTreeCtrl控件旁的图标才能显示,而在BOOL
- 简单的对话框问题!
- 关于MSXML parser如何得到(整数类型)节点属性的问题?
- 做识别对采集卡有经验的来看看
- 好消息!进销存源代码(试用版请到ftp://61.145.208.124/下载)!
- isapi 分析映射问题,搞了三天没搞定。恳请大侠援助
- MFC显示数据数据只显示最后一组数据,而不是动态更新
- 我写了一个COM为什么在页面调用不了?
- 发送字节映射表,接收字节映射表是干什么用的?
2、在实时处理线程函数的内部读取新增日志、完成数据统计。
3、以下范例
//==1==声明全局变量、函数
void _ExecuteThread(CXXXDlg* pcMF);
HANDLE g_hExecuteThread;
HANDLE g_hEventLog;
HANDLE m_hGlobalEvent;
//==2==调用NotifyChangeEventLog 函数,同时启动处理线程
void CXXXDlg::OnOK()
{
DWORD dwThreadID=0;
// Open the System event log.
g_hEventLog = OpenEventLog( NULL,"System");
if (g_hEventLog == NULL)
{
AfxMessageBox("Could not open the System event log.");
return ;
}
m_hGlobalEvent = CreateEvent(
NULL,
TRUE,
FALSE, // initial state is unsignaled
"GlobalEvent" // object name
);
if (m_hGlobalEvent == NULL)
{
AfxMessageBox("Eevent create failed.");
return ;
}
NotifyChangeEventLog(g_hEventLog,m_hGlobalEvent);
g_hExecuteThread = ::CreateThread(
NULL, 0,
(LPTHREAD_START_ROUTINE)_ExecuteThread,
this, 0, &dwThreadID); //Start thread
// CDialog::OnOK();
}
//==3==线程函数如下
void _ExecuteThread(CEventLogDemoDlg* pcMF)
{
DWORD dwWaitResult;
while (1)
{
dwWaitResult = WaitForSingleObject(m_hGlobalEvent,INFINITE);
switch (dwWaitResult)
{
case WAIT_OBJECT_0:
{
//==
AfxMessageBox("I got it! ");
ResetEvent(m_hGlobalEvent);
//==
}
break;
case WAIT_TIMEOUT:
//CloseEventLog(g_hEventLog);
//CloseHandle(...);
return ;
case WAIT_ABANDONED:
//CloseEventLog(g_hEventLog);
//CloseHandle(...);
return ;
}
}
}