Autor Beitrag
Arne
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 04.09.14 11:06 
Servus zusammen,

ich nutze D2007 und stehe vor folgendem Problem: ich muss Berechnungen, die Minuten dauern, in einen eigenen Thread auslagern, da sonst die Applikation mit einer AccessViolation auf die Adresse $FEEEFEEE abschmiert. Ich kann mir nur vorstellen, dass die langen Berechnungen im GUI Thread hierzu führen.
Nun möchte ich diese Berechnungen in einen Thread auslagern, der aber irgendwann dem GUI Thread mitteilen muss, dass er fertig ist und die Ergebnisse abgeholt werden können. Der Workerthread sendet nun z.B. ein TEvent.SetEvent. Aber wie kann der GUI Thread darauf lauschen? Eine nicht so tolle Methode wäre einen TTimer zyklisch auf das TEvent lauschen zu lassen. Aber wie macht man es richtig?

thanx, Arne
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 04.09.14 11:35 
Hi,
Du kannst auch mit PostMessage arbeiten und an das Handle deines Fensters eine Nachricht senden. Das einzige was zu beachten ist, ist das der Aufruf Synchron mit dem dem Hauptthread erfolgen muss.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Synchronize(
  procedure
  begin
    PostMessage(WindowHandle, MessageType, 00);
  end);

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Tastaro
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: Do 04.09.14 11:40 
tevent hat die Methode WaitFor. Damit kann man auf das Setzen des Events warten.
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Do 04.09.14 18:49 
user profile iconSinspin hat folgendes geschrieben Zum zitierten Posting springen:
Hi,
Du kannst auch mit PostMessage arbeiten und an das Handle deines Fensters eine Nachricht senden. Das einzige was zu beachten ist, ist das der Aufruf Synchron mit dem dem Hauptthread erfolgen muss.

Hä? PostMessage ist eine reine WIn32 API-Funktion, die brauchst du nicht synchronisieren. Ist ja auch irgendwie witzlos, zu warten bis der GUI Thread Zeit hat, nur um dann ein PostMessage zu machen. Da könnte man auch direkt ein SendMessage machen oder direkt im Synchonize eine Funktion der GUI aufrufen.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 04.09.14 23:25 
Soso, dann habe ich also Heute doch noch was gelernt.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?