![]() |
Hänger bei Sendmessage
Ich will dass nur eine Instanz meiner App läuft. Dazu erzeuge ich einen Mutex.
Delphi-Quellcode:
Dann überprüfe ich on eine Instanz schon da
MutexHandle := CreateMutex(nil, True, PROGNAME);
Delphi-Quellcode:
und schicke ihr eine Nachricht dass der User das Programm nochmal gestartet hat
if GetLastError = ERROR_ALREADY_EXISTS then
...
Delphi-Quellcode:
Die alte Instanz emfängt die Nachricht problemlos und kann darauf reagieren (ohne die MessageQueue zu blockieren, es wird nur ein Timer gestartet).
SendMessage( HWND_BROADCAST,
MyMsg, MSG_STARTAGAIN, 0 ); Das ganze mit Delphi 2009 unter Win 7 x64. Nun passiert aber merkwürdiges. Die neue Instanz hängt dauerhaft bei SendMessage und ich muss den Task mit den Taskmanager beenden. Hab auch ohne IDE Log in eine Datei geschrieben und der Code nach SendMessage wird definitiv nicht ausgeführt. Help! |
AW: Hänger bei Sendmessage
Schon lange nicht mehr mit SendMessage gearbeitet. Ist es nicht so, dass SendMessage so lange nicht zurückkehrt, bis es verarbeitet wurde?
Zitat:
|
AW: Hänger bei Sendmessage
Ich mache das so ähnlich, nur mit einigen kleinen Unterschieden:
Delphi-Quellcode:
Prinzipiell hat aber SendMessage, gerade bei einem Broadcast, das Problem, dass es erst zurückkehrt, wenn alle Fenster die Nachricht empfangen und verarbeitet haben (wie auch in meinem Code). Mögliche Lösungen: PostMessage statt SendMessage benutzen oder Fenster aller eigenen Instanzen suchen und die Message nur an diese senden.
LimitInstancesMsg:= RegisterWindowMessage(PChar('LimitInstanceMessage.' + PRODUCTNAME));
hMutex:= CreateMutex(nil, True, PRODUCTNAME + PRODUCTNAME + PRODUCTCOPYRIGHT); if GetLastError = ERROR_ALREADY_EXISTS then begin SendMessage(HWND_BROADCAST, LimitInstancesMsg, 0, 0); Exit; end; MfG Dalai |
AW: Hänger bei Sendmessage
PostMessage() kommt leider nicht in Frage, weil es kein Broadcast unterstützt.
Habe aber eine gute Lösung gefunden und zwar SendMessageTimeOut(). |
AW: Hänger bei Sendmessage
Zitat:
![]() Zitat:
|
AW: Hänger bei Sendmessage
Warum ballerst du alle Fenster mit der Nachricht zu? Such dir das Handle deines Fenster und schicke es nur an dein Fenster.
|
AW: Hänger bei Sendmessage
Zitat:
|
AW: Hänger bei Sendmessage
Komisch,
![]() |
AW: Hänger bei Sendmessage
Genauer gesagt funktioniert es nur mit System Messages, nicht mit User Messages.
|
AW: Hänger bei Sendmessage
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz