Ich möchte eine Nachricht an einen Thread senden und sie im Thread behandeln. Wie kann ich das in Delphi machen? Ich denke, PostMessage
ist der Weg zu gehen, aber die Beispiele, die ich bisher gesehen habe, beschreiben den anderen Weg, d. H. Vom Thread zum Hauptthread.
Ich werde nicht einmal versuchen, irgendeinen Code zu erklären oder zu schreiben. Schau dir dieses Tutorial an. Es ist ein wenig alt, aber sehr gut imho. Multithreading - Die Delphi-Art
Sie können entweder eine Nachrichtenschleife (möglicherweise mit einem ausgeblendeten Benachrichtigungsfenster) in Ihrem Thread haben und eine Windows-Nachricht an sie senden, oder Sie können eine nativere (weniger GUI-) Möglichkeit dafür verwenden, z. B. eine Warteschlange Geschützt durch einen kritischen Abschnitt, kombiniert mit einem manuellen Reset-Ereignis, auf das der Thread wartet und der sendende Thread signalisiert.
Eine allgemeinere Lösung ist eine Producer-Consumer-Warteschlange, die in der klassischen Implementierung ein paar Semaphore verwendet, um Konsumenten und Produzenten zu verfolgen, und einen dritten Semaphor für den sich gegenseitig ausschließenden Zugriff auf die Warteschlange; Im Netz sind jedoch optimalere Producer-Consumer-Warteschlangen verfügbar.
Warum sollten Sie es tun? Nur aus einem Grund musste ich eine Nachrichtenschleife in einem sekundären Thread erstellen, weil der Thread COM-Objekte verwendet. Die Aufrufe von OleInitialize () und OleUnitialize () sind ein Zeichen dafür, dass Sie eine Standard GetMessage () -Schleife benötigen . In diesem Fall ist es auch erforderlich, Nachrichten nur mit PostThreadMessage () an diesen Thread zu senden, da normale blockierende Synchronisierungsaufrufe die Nachrichtenschleife beeinträchtigen würden. Ansonsten tu es einfach nicht.
Wenn Sie auf Delphi 2007 oder 2009 sind, schauen Sie sich unbedingt OmniThreadLibrary von Primož Gabrijelčič an, es sollte Ihre Arbeit erleichtern .
Tags und Links multithreading delphi