AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Processmessages nicht anwendbar. Was nun?

Ein Thema von Mattze · begonnen am 14. Nov 2008 · letzter Beitrag vom 14. Nov 2008
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Processmessages nicht anwendbar. Was nun?

  Alt 14. Nov 2008, 13:12
Hallo,

application.processmessages kann ich an einer Stelle des Programmes nicht anwenden. (Warum, weiß ich nicht. Es müsste noch im Hauptthread sein!)
Nun möchte ich aber gerne einen Abbruch bei Bedarf erzeugen. (Click auf Abbrechenbutton und Setzen einer boolschen "Abbruchvariablen".)

Wie kriege ich das dann aber dort, wo ich abbrechen will (und kein processmessages funktioniert - Schutzverletzung) mit? Gibt's da was?

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Processmessages nicht anwendbar. Was nun?

  Alt 14. Nov 2008, 13:18
  1. ist Application.ProcessMessages sowieso immer schlecht
  2. musst du am Design deines Programmes etwas ändern (mehr kann ich nicht sage, ich kenn ja dein Programm nicht)
  3. Wenn du den Programmablauf sauber von der GUI getrennt hast, ist es ganz einfach
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Processmessages nicht anwendbar. Was nun?

  Alt 14. Nov 2008, 13:22
Application.ProcessMessages ist schlecht. Letztlich emuliert Application.ProcessMessages das, was einem Threads viel einfacher bieten, wenn man denn seine Programmlogik sauber von der GUI getrennt hat. Wenn Deine Programmlogik natürlich überall im Code auf die GUI zugreift, ist das eher unschön, weil die VCL nicht ThreadSafe ist. In dem Falle wäre ein Neu Design deines Programmes fällig (oder alternativ böse Hacks die Dir irgendwann auf die Füße fallen).
Fridolin Walther
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

Re: Processmessages nicht anwendbar. Was nun?

  Alt 14. Nov 2008, 14:27
Hallo,

vielen Dank für Eure wirklich sehr schnelle Antwort.

Ich muss gestehen, dass ich in den letzten Jahren nur ein einziges Mal Probleme mit application.processmessages hatte. Und dann war es an der Stelle sowieso nicht nötig. Also von daher finde ich es so schlimm (,wie ich natürlich auch gelesen habe,) nicht.
Ich kann mir momentan auch nicht vorstellen, wie ich es umgehen könnte.

Wenn ich auf einen "Abbruchbutton" clicke, nutze ich doch schon die GUI.
Mein Programm ist nur mein privater WindowsExplorerersatz. Macht viel mehr und gefällt mir einfach besser. (Ist ja klar!) In sofern nutzt es die GUI sowieso sehr intensiv. Das Programm kann man nicht wahrscheinlich kaum von der GUI trennen, oder sehe ich das falsch?
In diesem Programm nutze ich massenhaft Fremdkomponenten (z. B. TVirtualExplorerEasyListview). Wieweit die die GUI nutzen, weiß ich nicht. Rausnehmen geht aber garantiert auf gar keinen Fall!

Es bleibt also nur, das Processmessages irgendwie zurechtzubiegen. Aber wie?

Gruß
Mattze
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Processmessages nicht anwendbar. Was nun?

  Alt 14. Nov 2008, 14:58
Nunja, möglich wäre Application.ProcessMessages im Main Thread auszuführen. Das könnte man mit AsyncCalls realisieren:
Delphi-Quellcode:
 EnterMainThread;
 try
   Application.ProcessMessages;
 finally
   LeaveMainThread;
 end;
Damit wäre sicher gestellt, das ProcessMessages definitiv im Main Thread ausgeführt wird, auch wenn die Methode grade in irgend einem anderen Thread ausgeführt werden sollte.
Fridolin Walther
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Processmessages nicht anwendbar. Was nun?

  Alt 14. Nov 2008, 17:03
Was soll das bringen? Mit dem Hauptthread kann nur synchronisiert werden, wenn er gerade pausiert, also Nachrichten entgegennehmen kann. Daher ist ein Application.ProcessMessages in dieser Form absolut sinnfrei. Wenn man Application.ProcessMessages nur ausführen will, wenn man im Hauptthread ist, kann man auch MainThreadID und GetCurrentThreadId vergleichen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Processmessages nicht anwendbar. Was nun?

  Alt 14. Nov 2008, 17:05
[EDIT]Löschen bitte ... Logikfehler.[/EDIT]
Fridolin Walther
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz