Richtig Thread beenden!



  • Hallo Leute,

    ich bin gerade an einer GUI (Windows Forms) zur Bedienung eines Scan-Interfaces für Schweißprozesse.

    Der Prozess wird auf einer PC-internen Karte mit einer einfachen Library des Herstellers mit der Funktion start_list() gestartet. Diese liegt hinter einem Button und blockiert, sobald der Prozess anläuft, die Forms, sodass ich den Prozess nicht abbrechen kann (Funktion stop_list()));

    Ich habe nun den Prozess in einen eigenen Thread verlagert(gcnew Thread, gcnew Threadstart), um die Kontrolle über die Forms zu behalten, nur wie greife ich in den neuen Thread ein? Ich habe schon viel über die Threads gelesen, denn ein einfaches Abort funktioniert leider nicht.

    Mir geht es eher um eine Lösungsidee und keinen direkten Code.

    Ich muss dazu sagen, dass meine Programmierhochzeiten 10 Jahre zurück liegen und ich wieder viel lernen muss.

    Vielen Dank!



  • Mir ist nicht ganz klar wo das Problem liegt. Was genau meinst du mit "in den neuen Thread eingreifen"? Der Thread, den du erzeugst, führt doch deinen Code aus!?



  • Hallo,

    dies hier ist zwar für C#, zeigt aber alles wesentliche, was man über Multithreading in .net wissen sollte.
    http://www.albahari.com/threading/

    Warum man bei einer offenbar ernst gemeinten und professionellen Anwendung eine Benutzeroberfläche in C++/CLI schreibt, ist mir allerdings rätselhaft. Verglichen mit C# ist GUI-Entwicklung in C++/CLI eine Zumutung.

    C-Funktionen aus einer externen API kann C# auch aufrufen. Nur für komplexeren Austausch zwischen C++ und .net macht ein kleiner Teil C++/CLI Sinn, als Kleber zwischen C++ und managed Welt.

    Wenn deine Antwort darauf ist "früher habe ich das mit C++ gemacht, deshalb mache ich es jetzt mit C++/CLI", schon hier die Antwort vorweg: Nein, auch dann solltest du die Oberfläche in C# machen.



  • nn, ich glaube du hast vollkommen recht. Mein Problem ist nur, dass ich die Strukturen des Programmierens von damals noch drauf habe, sich aber der ganze Kram mit C# C /CLI etc an mir vorbeientwickelt hat, weil ich zwischenzeitlich nicht mehr in der Entwcklung war. Verstehe ich das richtig, dass Windows Forms bedeutet in C++ /CLI zu arbeiten? Wäre es das dann sinnvoller mit QT zu arbeiten ? Da gibt es ja auch einige Lösungen für Threading.
    Die Anwendung stellt mehr oder weniger Koordinaten dar und übergibt diese und steuert den Ablauf eines Portalschweißkopfes. Echtzeitkritisch ist das ganze meiner meinung nach nicht, da die Daten auf dem Speicher der Steuerungskarte abgelegt werden und dann erst ausgeführt werden.



  • fungo schrieb:

    Verstehe ich das richtig, dass Windows Forms bedeutet in C++ /CLI zu arbeiten? Wäre es das dann sinnvoller mit QT zu arbeiten ?

    Nein und nein. C++/CLI ist nicht für die Entwicklung graphischer Oberflächen gedacht, sondern als Klebstoff zwischen .NET und native Code. Wenn du graphische Oberflächen entwickeln willst, dann nimm C#, C++/CLI ist dafür denkbar ungeeignet. Qt geht auch, aber da du sowieso nicht um jeden Preis C++ verwenden musst und die Portabilität auf andere Plattformen als Windows offenbar egal ist, würd ich sehr zu C# raten.



  • Zur ursprünglichen Frage: Ein Thread beendet man mit einem "return"...


Anmelden zum Antworten