10. februar 2004 - 16:11Der er
12 kommentarer og 1 løsning
PostThreadMessage() til CWinApp
Jeg kan ikke få fat i de beskeder jeg sender fra en tråd, jeg sender dem med m_hMainThread->PostThreadMessage( WM_POSTTOTHREAD, POSTTOQUEUE, reinterpret_cast< LPARAM >(pCMsg ) ); m_hMainThread er en CWinThread* til hovedtråden, WM_POTTOTHREAD er: const UINT WM_POSTTOTHREAD = WM_USER + 0; POSTTOQUEUE er: const UINT POSTTOQUEUE = WM_APP + 0; Ovre i min CWinApp bruger jeg dette: BEGIN_MESSAGE_MAP(CCANEmcyApp, CWinThread) ON_THREAD_MESSAGE( WM_POSTTOTHREAD, OnReciveCMSG ) END_MESSAGE_MAP() Men der sker intet, det går fint med PostThreadMessage, men jeg modtager aldrig noget Jeg bruger VC++ .Net
Der er et problem med at sende en message med PostThreadMessage() hvis applikationen kører i en modal loop dvs. en modal dialog, hvis den gør det bliver beskeden ignoreret.
Du kan installere en message hook til at fange beskeden. Det gør man med SetWindowsHookEx(...), med en WH_GETMESSAGE hook.
Jeg har vist et eksempel til at ligge, kan godt rode det frem hvis det har interresse.
Jeg har lige været inde på din hjemmeside bertelbrander, og set dine eksempler har også prøvet med peekmessage, men det er ikke helt det jeg skal bruge, det jeg godt kunne tænke mig var noget i stil med onCommand, WM_COMMAND og postmessage, men jeg har pt ikke noget vindue i dll'en
Eksemplet er lavet med VC++ 6.0, så der skal måske nogle små rettelser til for at få det til at køre på .net Hvis det kører som det skal vil tælleren i "Val: xx" tælle op, en gang for hver sekund.
Jeg er ikke sikker på at jeg forstår hvordan man kan have en CWinApp til at køre i en DLL (en static MFC dll!) uden noget vindue, men der er nok heller ikke nødvendigt at jeg forstår...
Jeg har prøvet at implementer det du sendte i dit eksempel, men det duer ikke, det jeg gjorde før var at jeg lavede min tråd med _beginthreadx, nu har jeg så også prøvet med AfxBeginThread, men der sker ikke en S..., når jeg debugger det, sender PostThreadMessage fint, returværdien er 1, når jeg slutter programmet kommer dette: Detected memory leaks! Dumping objects -> {60} normal block at 0x01024B38, 16 bytes long. Data: < > 94 00 00 00 08 00 00 00 00 10 81 03 0C 01 80 00 {59} normal block at 0x01024AE8, 16 bytes long. Data: < > 94 00 00 00 08 00 00 00 00 00 81 03 0C 01 00 00 . . {51} normal block at 0x010229C8, 16 bytes long. Data: < > 94 00 00 00 08 00 00 00 00 00 81 03 0C 01 00 00 Object dump complete. Men jeg kan ikke få fat idet?????
"Detected memory leaks!" tyder på at nogen glemmer at delete/free() noget, og har måske/måske ikke noget med sagen at gøre.
Hvis du er sikker på at du får sendt beskeden korrect må der være en fejl på modtager siden. Hvad er det du forsøger at sende til? Hvad laver den tråd der skulle modtage?
Jeg er klar over jeg ikke får ryddet op, det der er vist ovenfor er de data jeg sender fra min tråd, men som jeg ikke kan få fat på i min CWinApp tråd. Den tråd der skulle modtage laver ikke noget, det er som sagt en DLL hvor der er mulig hed for at lave tre kald ned i, som det er nu. Et der stater tråden, et der stopper den og et kald der retunerer de data der bliver sendt fra tråden.
Lige for at forstå det rigtigt, er den tråd du sender til CWinApp-tråden eller en anden tråd?
En tråd kan ikke lave "ikke noget", den må vente i en eller anden form for løkke, hvis den skal kunne modtage beskeder fra andre tråde og/eller fra windows skal den køre i en eller anden form for message loop.
En CWinApp tråd har normalt en message-loop der er skjult for brugeren, men andre tråde må man selv kode en loop for.
Det er helt iorden så skal du have tak for hjælpen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.