Обсуждаем внутренности птохи?
Запустил под профайлером и увидел что часто зовутся KillTimer и SetTimer
при этом таймер убивается внутри обработчика WM_TIMER
кто знает зачем так сделано?
этот таймер настроен на 10 раз в секунду.
Код: Выделить всё
} else if(msg.message == WM_TIMER) {
if (msg.wParam == clsServerManager::sectimer) {
clsServerManager::OnSecTimer();
} else if (msg.wParam == clsServiceLoop::srvLoopTimer) {
clsServiceLoop::mPtr->Looper();
void clsServiceLoop::Looper() {
#ifdef _WIN32
KillTimer(NULL, srvLoopTimer);
#endif
// PPK ... two loop stategy for saving badwith
if(bRecv == true) {
ReceiveLoop();
} else {
SendLoop();
clsEventQueue::mPtr->ProcessEvents();
}
if(clsServerManager::bServerTerminated == false) {
bRecv = !bRecv;
#ifdef _WIN32
srvLoopTimer = SetTimer(NULL, 0, 100, NULL);
if(srvLoopTimer == 0) {
AppendDebugLog("%s - [ERR] Cannot start Looper in clsServiceLoop::Looper\n", 0);
exit(EXIT_FAILURE);
}
#endif
} else {
// tell the scripts about the end
clsScriptManager::mPtr->OnExit();
// send last possible global data
clsGlobalDataQueue::mPtr->SendFinalQueue();
clsServerManager::FinalStop(true);
}
}