Hallo,
ich möchte komplex berechnete Daten grafisch in einer TPaintbox (o.ä.) im Hauptformular anzeigen. Die Daten werden in einem eigenen Thread berechnet, schon, damit die Menüs ansprechbar sind.
Im Thread schreibe ich die berechneten Daten in einen Puffer. Mein Problem: Wenn der Puffer voll ist, dann soll der Thread warten, so dass das Hauptprogramm Zeit hat, den Puffer zu leeren. Ich wollte das mit einer Message lösen (s. u.), aber bleibe bei der Schleife "application.processmessages" in einer Dauberschleife hängen. Wahrscheinlich bewirkt processmessages keinen Thread-Wechsel, wein keine Messages da sind, auch durchaus logisch. Aber warum gehen dann Clicks im Mainmenue? Wenn der Puffer nie voll läuft, dann geht es.
Hat jemand eine Erklärung? Mit Semaphoren und Mutex würde das Problem sicher lösbar, scheint mir aber mit "Kanonen nach Spatzen geschossen" (Redensart, ich liebe Spatzen!)
Grüße
GuaAck
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Program Main; TYPE Txx=Tclass(TForm); PROCEDURE Leere_Puffer(VAR m: integer); MESSAGE WM_USER + 1; END; END;
Begin REPEAT while puffer_voll do application.processmessages; IF Puffer_leer THEN postmessage(Form_handle, WM_USER + 1, 0, 0); } Fuelle_puffer; UNTIL Abbruch; end; |