Ik ben bezig met het schrijven van een p2p client en ik zit met een vaag probleem. Normaal is CPU usage ongeveer 0%, maar sinds kort is het vaker 100% en dat is nogal storend.
Dus ik in Visual C++ 6 profilen met als resultaat:
Alle tijd wordt dus doorgebracht in een (simpele) MFC functie (ongeveer 52 ms per hit):
Volgens mij gaat er iets gruwelijk fout, want ik zou niet weten waar die functie mee bezig is. Wat is hier aan de hand?
Dus ik in Visual C++ 6 profilen met als resultaat:
code:
1
2
3
4
| Command line at 2004 Apr 11 20:57: "F:\VC\xbt\XBT Client\Debug\XBT Client"
Time in module: 76438,544 millisecond
75351,273 98,6 75773,696 99,1 1437 CWinThread::PumpMessage(void) (mfc42d.dll)
75,806 0,1 75,806 0,1 58546 operator delete(void *) (mfc42d.dll) |
Alle tijd wordt dus doorgebracht in een (simpele) MFC functie (ongeveer 52 ms per hit):
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| BOOL CWinThread::PumpMessage() { ASSERT_VALID(this); if (!::GetMessage(&m_msgCur, NULL, NULL, NULL)) { #ifdef _DEBUG if (afxTraceFlags & traceAppMsg) TRACE0("CWinThread::PumpMessage - Received WM_QUIT.\n"); m_nDisablePumpCount++; // application must die // Note: prevents calling message loop things in 'ExitInstance' // will never be decremented #endif return FALSE; } #ifdef _DEBUG if (m_nDisablePumpCount != 0) { TRACE0("Error: CWinThread::PumpMessage called when not permitted.\n"); ASSERT(FALSE); } #endif #ifdef _DEBUG if (afxTraceFlags & traceAppMsg) _AfxTraceMsg(_T("PumpMessage"), &m_msgCur); #endif // process this message if (m_msgCur.message != WM_KICKIDLE && !PreTranslateMessage(&m_msgCur)) { ::TranslateMessage(&m_msgCur); ::DispatchMessage(&m_msgCur); } return TRUE; } |
Volgens mij gaat er iets gruwelijk fout, want ik zou niet weten waar die functie mee bezig is. Wat is hier aan de hand?