Inter-thread-Kommunikation. So senden Sie ein signal an einen anderen thread

In meiner Anwendung habe ich zwei threads

  1. eine "Haupt-thread" was beschäftigt die meisten der Zeit
  2. einem "zusätzlichen thread" die sendet einige HTTP-Anfrage und die Blöcke, bis es eine Antwort bekommt.

Jedoch, den HTTP-Antwort können nur behandelt werden, indem Sie den Haupt-thread, da es stützt sich auf thread-local-storage und nicht Thread-sichere Funktionen.

Ich bin auf der Suche nach ein Weg, zu sagen, der Haupt-thread, wenn eine HTTP-Antwort empfangen wurde, und die entsprechenden Daten. Der Haupt-thread sollte unterbrochen werden, indem der zusätzliche thread-und Prozess-den HTTP-Antwort so bald wie möglich, und danach arbeiten Sie weiter von dem Punkt, wo es unterbrochen wurde, bevor.

  • Einen Weg, woran ich denken kann ist, dass die zusätzlichen thread unterbricht den Haupt-thread mit SuspendThread, kopiert die TLS von den Haupt-thread mit einigen inline-assembler, führt die response-Verarbeitung-Funktion selbst auf und kehrt in den Haupt-thread danach.

  • Einen anderen Weg, in meinen Gedanken ist, festlegen Sie einen Haltepunkt auf einige spezifische Adresse in dem zweiten threads callback-routine, so dass der Haupt-thread wird benachrichtigt, wenn das zweite Gewinde (instruction-pointer Schritte auf, die break-point - und-daher - erhalten hat, der HTTP-Antwort.

Jedoch, beide Methoden scheint das nicht zu schön an alle, Sie zu verletzen, wenn auch nur über Sie nachzudenken, und Sie sehen nicht wirklich zuverlässig.

Was kann ich verwenden, um interrupt meinem Haupt-thread, es zu sagen, dass es sein sollte höflich und verarbeiten der HTTP-Antwort, bevor Sie etwas anderes tun? Antworten ohne Abhängigkeiten von Bibliotheken sind geschätzt, aber ich würde auch etwas Abhängigkeit, wenn er bietet einige schöne Lösung.

Folgenden Frage (in Bezug auf die QueueUserAPC Lösung) wurde beantwortet und erklärt, dass es keine sichere Methode, um eine push-Verhalten in meinem Fall.

  • Tun Sie wirklich brauchen, zu "unterbrechen" Ihre Haupt-thread? Wie ist die Verarbeitung sowieso, aus einer queue oder anderen arbeiten Mechanismus?
  • Ja, eine Unterbrechung ist, was ich erreichen will in meinem Fall (in einigen "push"-Stil, Art und Weise. Nicht einige Wait oder LookIfThereIsSomething oder Poll "pull"-Stil-Ding). Die Verarbeitung Teil der HTTP-Antwort, die empfangen wurde von dem zweiten thread und ruft einige nicht Thread-sichere Funktionen zu einem Lua-interpreter danach. Das "WIE", um die Nachricht von dem zweiten thread der Haupt-thread könnte eine shared memory, allerdings ist diese noch nicht fest, da ich nicht weiß, wie der zweite thread Benachrichtigen der main-thread, sollte Prozess jetzt.
  • Was ist dein Haupt-thread zu tun? ist es unterbrochen?
InformationsquelleAutor Etan | 2009-12-30
Schreibe einen Kommentar