Tråd problemmer ved tegning af vindue
Jeg er ved at skrive et plug-in til en media afspiller. Plug-in'et er en dll.Plug-in'et visser hvilken sang der spilles i et popup vindue (tooltip ballon). Problemmet er at mens vinduet er fremme låser hele interfacet på afspilleren. Jeg har prøvet et løse det ved at oprette en ny tråd, hvor fra jeg opretter vinduet. Problemmet er nu at vinduet bliver vist, men tekst mv. bliver aldrig tegnet og forsvinder heller ikke igen som det skal. (Vinduet bliver automatisk lukket via en timer)
Jeg går ud fra det er pga. at vindue procedure aldrig får CPU tid, så vil hører om der er nogen der har erfaring med at løse den slags.
Jeg opretter min tråd med følgende:
g_hThreadHandle = ::CreateThread(NULL, 0, BalloonThreadProc, 0, CREATE_SUSPENDED, &g_iThreadID);
// Error check
ResumeThread(g_hThreadHandle);
Mit trådloop ser ud som følger:
while (true)
{
if (WAIT_OBJECT_0 == MsgWaitForMultipleObjects(1, g_hWaitEvents, false, INFINITE, QS_ALLEVENTS)) {
bFirstRun = true;
ResetEvent(g_hWaitEvents[0]);
}
if (g_bQuit)
break;
if (bFirstRun) {
bFirstRun = false;
// Lav str
if (!pWindow->m_hWnd)
MessageBox(hwndPlayer, _T("Error"), _T("Error!"), MB_OK);
else {
wndOwner.FromHandle(pWindow->m_hWnd);
CBalloonHelp::LaunchBalloon(" Now Playing:", strOut, g_rectPos, IDI_INFORMATION,
CBalloonHelp::unDELETE_THIS_ON_CLOSE|CBalloonHelp::unCLOSE_ON_LBUTTON_UP|CBalloonHelp::unSHOW_TOPMOST|CBalloonHelp::unCONTENT_TEXT_CENTER,
&wndOwner, "", iTimeOut);
}
}
}
} // End loop