Designfehler Threading - Workarround



  • Für ein Compact Framework (2.0) Projekt muss eine Blackbox eingesetzt werden.

    Gesteuert wird die Programmlogik der Blackboox mit mehreren Timern, Flags und Verzweigungen. Die Box kehrt nach Aufruf einer Mehtode direkt zurück und liefert sich danach einen Kampf mit Timern. Ist die Box am Ende, kann diese ein Event werfen.

    Bisher wurde diese Box im Hauptthread aufgerufen. Der Aufruf stellte sicher, das nur 1 Instanz läuft und der Hauptthread wurde im Leerlauf betrieben bis die Box mit einem Event signalisierte, das sie fertig ist.

    Nun müssen mehrere Instanzen Parallel betrieben werden, die am Ende ein gemeinsames Ergebnis liefern müssen. Der Hauptthread setzt an mehreren Stellen Waithandler mittels WaitOne ein, das die "Box" an der Arbeit hindert da der Thread in dem das Objekt erzeugt wurde steht.

    Die Lösung ist natürlich die Box in einem eigenen Thread zu starten. Jedoch fehlt mir die Idee, die ich einen Thread erzeugen kann der im Leerlauf läuft um als Basis für Box zu arbeiten.

    Im Moment sieht die Implementierung vor, einen Thread mittels Application.Run() zu erzeugen um die Boxen innerhalb diesen Threads am leben zu erhalten. Mir erscheint das aber ein wenig übertrieben, mir fehlt aber eine Idee wie ich einen Thread am leben erhalten kann ohne diesen zu blockieren. (Die Box würde erstellt und danach wäre der Thread auch schon beendet.)

    Mir fehlt hier ein Ansatz das Problem zu lösen. Die Implementierung der Box kann nicht geändert werden. Ich sitze zu lange an diesem Projekt um ausreichend Abstand zu bekommen und für die restlichen Kollegen ist sowas wie WaitHandler oder einen Thread Blockieren (somit auch Deadlocks) ein Fremdwort.

    Eventuell gibt es einen eleganteren Weg als ein Application.Run zu missbrauchen um die Probleme der Box zu umgehen ?

    [edit] Der 36h Bonus schlägt zu [/edit]



  • nach ein wenig googeln erscheint es mir garnicht mehr so falsch in einem 2 Thread Application.Run zu verwenden. Ich sollte, wenn ich dennn mal ausgeschlafen bin, mich mit den Nebenwirkungen bzw. eventuellen Problemen des ThreadinApartments etc. machen. (Eventuell hat hier jemand schon ein paar hilfreiche Links die auf Probleme mit einem 2. Application.Run innerhalb eines Prozesses aufmerksam machen.)

    thx


Anmelden zum Antworten