eXeL@B —› Программирование —› WaitForDebugEvent(&de, 0) |
Посл.ответ | Сообщение |
|
Создано: 19 февраля 2007 07:20 · Личное сообщение · #1 Хочу сделать в потоке обработку DebugEvents и запросов от клиента - Run, HandleException и т.д. Поэтому для скорости необходимо просто проверять очередь DebugEvents. Делаю так: WaitForDebugEvent(&de, 0); Но как понять, когда ф-я вытаскивает из очереди DebugEvents очередное событие, а когда нет? Сама она всегда возвращает 1. Если написать самый примитивный цикл обработки и вместо INFINITE написать 0: if (!WaitForDebugEvent(&de, 0)) { Sleep (0); continue; } Все равно возвращается 1 и проц грузится на 100% и жутко тормозит, т.к. все проц. время тратится на _пустую_ обработку. Так как мне узнать когда процесс ожидает Debug-обработки? |
|
Создано: 19 февраля 2007 07:34 · Личное сообщение · #2 Эта функция не выполнится пока не возникнет отладочное исключение: bool DebugLoop=true; DWORD Continue; DEBUG_EVENT dbg_event; while(DebugLoop) { WaitForDebugEvent(&dbg_event, INFINITE); switch(dbg_event.dwDebugEventCode) { case(CREATE_PROCESS_DEBUG_EVENT): { ... Continue = DBG_CONTINUE; break; } case(EXIT_PROCESS_DEBUG_EVENT): { Continue = DBG_CONTINUE; DebugLoop = false; ContinueDebugEvent(dbg_event.dwProcessId, dbg_event.dwThreadId, DBG_CONTINUE); break; } default: { Continue = DBG_CONTINUE; break; } ContinueDebugEvent(dbg_event.dwProcessId, dbg_event.dwThreadId, DBG_CONTINUE); } |
|
Создано: 19 февраля 2007 08:04 · Личное сообщение · #3 |
|
Создано: 19 февраля 2007 10:53 · Личное сообщение · #4 Решение нашлось! =) Во-первых, по-настоящему WaitForDebugEvent(&de, 0) возвращает 0, если отладочных сообщений нет. Во-вторых, подвисала прога из-за высокого приоритета потока. Изменив на THREAD_PRIORITY_LOWEST, поток перестал тормозить отлаживаемое приложение. И в-третьих Sleep(0) меняем на Sleep(1), чтобы проц мог простаивать |
eXeL@B —› Программирование —› WaitForDebugEvent(&de, 0) |
Эта тема закрыта. Ответы больше не принимаются. |