这是一个从OutputDebugString中读取信息的程序段,小弟我这样写了,可是ret总不等于WAIT_OBJECT_0 ,还知道啊(在打问号的地方不匹配)
这是一个从OutputDebugString中读取信息的程序段,我这样写了,可是ret总不等于WAIT_OBJECT_0 ,各位高手还知道啊?(在打问号的地方不匹配)
m_dwResult = ERROR_INVALID_HANDLE;
m_AckEvent = CreateEvent(NULL, false, false, "DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER_READY'");
}
m_ReadyEvent = CreateEvent(NULL, false, false, "DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_DATA_READY'");
}
m_SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "DBWIN_BUFFER");
if (m_SharedFile == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER'");
}
//映射调试缓冲区
SharedMem = MapViewOfFile(m_SharedFile,FILE_MAP_READ,0,0,0);
pdbBuffer = (PDEBUGBUFFER)MapViewOfFile(m_SharedFile,FILE_MAP_READ,0,0,0);
if (pdbBuffer == NULL) {
throw gcnew Exception("Failed to create event 'pdbBuffer'");
}
for (m_dwResult = ERROR_SIGNAL_PENDING; (m_dwResult == ERROR_SIGNAL_PENDING); )
{
// 等待缓冲区数据
SetEvent(m_AckEvent);
int ret =WaitForSingleObject(m_ReadyEvent, 0/*INFINITE*/);
if (ret == WAIT_OBJECT_0)///?????????????????????????????????????
{
// 如果是 继续等待,否则表示主线程发出了停止信号,退出当前线程
if (m_dwResult == ERROR_SIGNAL_PENDING)
{
// 取到了值,将值已经放在了 pdbBuffer 中
String^ myString = pdbBuffer->dwProcessId.ToString();
listView1->Columns->Add(myString, 100, HorizontalAlignment::Left);
}
}
else
{
// 等待失败
m_dwResult = WAIT_ABANDONED;
}
}
------解决方案--------------------
一切尽在不言中~~~接分~~
m_dwResult = ERROR_INVALID_HANDLE;
m_AckEvent = CreateEvent(NULL, false, false, "DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER_READY'");
}
m_ReadyEvent = CreateEvent(NULL, false, false, "DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_DATA_READY'");
}
m_SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "DBWIN_BUFFER");
if (m_SharedFile == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER'");
}
//映射调试缓冲区
SharedMem = MapViewOfFile(m_SharedFile,FILE_MAP_READ,0,0,0);
pdbBuffer = (PDEBUGBUFFER)MapViewOfFile(m_SharedFile,FILE_MAP_READ,0,0,0);
if (pdbBuffer == NULL) {
throw gcnew Exception("Failed to create event 'pdbBuffer'");
}
for (m_dwResult = ERROR_SIGNAL_PENDING; (m_dwResult == ERROR_SIGNAL_PENDING); )
{
// 等待缓冲区数据
SetEvent(m_AckEvent);
int ret =WaitForSingleObject(m_ReadyEvent, 0/*INFINITE*/);
if (ret == WAIT_OBJECT_0)///?????????????????????????????????????
{
// 如果是 继续等待,否则表示主线程发出了停止信号,退出当前线程
if (m_dwResult == ERROR_SIGNAL_PENDING)
{
// 取到了值,将值已经放在了 pdbBuffer 中
String^ myString = pdbBuffer->dwProcessId.ToString();
listView1->Columns->Add(myString, 100, HorizontalAlignment::Left);
}
}
else
{
// 等待失败
m_dwResult = WAIT_ABANDONED;
}
}
------解决方案--------------------
一切尽在不言中~~~接分~~