Zum Inhalt springen

Frage zum Multi-Threading


Kati82

Empfohlene Beiträge

Hallo,

ich steh mal wieder aufm Schlauch und ich hoffe ihr könnt mir helfen.

Ich habe einen Button, wenn man auf den klickt, wird ein Thread gestart, in dem ein Timeout eingebaut ist. Somit kann es manchmal ein paar Sekunden dauern bis der Thread beendet wird.

Das Problem was ich jetzt habe ist, wenn der Anwender sehr schnell hinter einander den Button drückt, dann habe ich ja ganz viele (gleiche) Threads am laufen. Und jetzt möchte ich, dass mit einem Abbrechen-Button, alle diese Threads beendet werden. Wie mache ich das jetzt am besten? Macht man das mit so einem ThreadPool? Oder gibts da noch was anderes?

Gruß Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich versteh das mit dem ThreadPool noch nicht so ganz. Habe das jetzt genau so implementiert wie in dem MSDN Beispiel. Allerdings ist meine Methode, die dann vom ThreadPool aus gestartet werden soll, nicht static bei mir. Ich möchte auch nicht, dass die static ist, weil dann ein Haufen Fehlermeldungen kommen und ich somit die Methode umschreiben müsste. Jedenfalls kommt dann bei mir schon folgende Fehlermeldung wenn ich es als nicht static belasse:

error C3352: 'void NetworkTest::CTcpTest::SendData(System::Object ^)' : the specified function does not match the delegate type 'void (System::Object ^)'

Die Meldung komt übrigens bei dem QueueUserWorkItem. Was kann ich da jetzt tun?

@SoL_Psycho:

Lerne nicht Programmiersprachen, lerne Programmieren...

Ich bin doch schon dabei!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo nochmal.

also das mit dem Threadpool habe ich jetzt hinbekommen. Aber trotzdem kapiere ich die Funktionsweise nicht von dem ThreadPool.

Ich wollte den Threadpool ja deswegen benutzen, weil ich ein Thread habe in dem Daten gesendet werden. Und wie ich bereits geschrieben habe, kann dieser Thread sehr häufig hintereinander gestartet werden. Bei einem Klick auf den Button Abbrechen sollten natürlich alle gestarteten Sende-Threads beendet werden. Wenn aber kein ThreadPool vorhanden ist, wird nur ein Thread beendet. Dazu kommt dann noch, dass die Verbindung geschlossen wird, aber die anderen noch laufenden Threads senden wollen. Das führt natürlich zu Fehlermeldungen.

Jetzt habe ich das mit dem ThreadPool eingebaut. Alles funktioniert soweit. Ich versteh nur nicht, dass auf einmal keine Fehlermeldungen mehr kommen, wenn ich auf Abbrechen (Verbindung schließen) drücke, weil ich noch überhaupt nichts programmiert habe, dass der ThreadPool abgebrochen werden soll. Wobei ich nebenbei gesagt, gar nicht weiß wie das geht, bzw. ob man das überhaupt machen muss.

Kann mir jemand eventuell mal dieses Verhalten erklären? Wäre euch sehr dankbar.

Gruß Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...