iMarcG5
Mitglied
Threadprozess optimierung durch ThreadStates
So guten Tag erstmal euch allen.
Wie ihr schon an der Überschrift erkennen könnt geht es mir um Threadhandling.
Zunächst mal wollte ich loswerden, dass es bei mir alles gut funktioniert.
Zu meinem "Problem" und woran ich arbeite.
Ich schreibe ein Programm , das mit GPS- Daten einer GPS Maus etwas "macht". (sorry , darf es leider nicht näher erläutern!)
Ich habe dazu eine Automatische Erkennung geschrieben, das die ports 1-8 abwechselnd öffnet, den Stream untersucht und wieder schließt.
Wird der GPS- stream erkannt, ist natürlich auch die Maus und ihr Port erkannt.
Dazu benutze ich einen Thread, und eine Switch{}!
Zum ablauf:
Thread wird gestartet. Variable auf "1"
1. Port wird geöffnet.
Thread.Sleep(2000) //damit ein wenig ein Input vorhanden ist
Der eingegangene stream wird untersucht. falls nix war, wird variable erhöht und dann der 2. Port usw untersucht. Wird der Port gefunden, ist es ja abgeschlossen.
Da ich einen Thread, der mit "Abort()" beendet wurde nicht mehr öffnen kann, benutze ich Thread.Suspend()
will ich die Autoerkennung wieder ausführen, wird der Thread nat. nicht neu gestartet sondern "Resume()d". Was auch alles eins A funktioniert.
Nun aber zu dem was mich stört.
Der Thread wird ja mit Thread.Suspend(); angehalten (in der Theorie). Bei mir braucht jedoch genau dieser Thread wenn er ThreadState = "Suspended" ist 100% CPU !!
Und das geht ja mal gar nicht klar!
Es scheint als hätte ich da was falsch verstanden. Aber das kann ja wirklich nicht sein.
Zudem verwundert mich eben, dass man es ja so machen MUSS, wenn man den Thread anhalten und wieder starten will. Also kann das ja eigentlich schon gleich zweimal nicht sein!
Ich hoffe ihr habt verstanden worum es mir geht und könnt mir helfen.
PS: ich hoff ich war zur abwechslung mal nettiquette - Konform
So guten Tag erstmal euch allen.
Wie ihr schon an der Überschrift erkennen könnt geht es mir um Threadhandling.
Zunächst mal wollte ich loswerden, dass es bei mir alles gut funktioniert.
Zu meinem "Problem" und woran ich arbeite.
Ich schreibe ein Programm , das mit GPS- Daten einer GPS Maus etwas "macht". (sorry , darf es leider nicht näher erläutern!)
Ich habe dazu eine Automatische Erkennung geschrieben, das die ports 1-8 abwechselnd öffnet, den Stream untersucht und wieder schließt.
Wird der GPS- stream erkannt, ist natürlich auch die Maus und ihr Port erkannt.
Dazu benutze ich einen Thread, und eine Switch{}!
Zum ablauf:
Thread wird gestartet. Variable auf "1"
1. Port wird geöffnet.
Thread.Sleep(2000) //damit ein wenig ein Input vorhanden ist
Der eingegangene stream wird untersucht. falls nix war, wird variable erhöht und dann der 2. Port usw untersucht. Wird der Port gefunden, ist es ja abgeschlossen.
Da ich einen Thread, der mit "Abort()" beendet wurde nicht mehr öffnen kann, benutze ich Thread.Suspend()
will ich die Autoerkennung wieder ausführen, wird der Thread nat. nicht neu gestartet sondern "Resume()d". Was auch alles eins A funktioniert.
Nun aber zu dem was mich stört.
Der Thread wird ja mit Thread.Suspend(); angehalten (in der Theorie). Bei mir braucht jedoch genau dieser Thread wenn er ThreadState = "Suspended" ist 100% CPU !!
Und das geht ja mal gar nicht klar!
Es scheint als hätte ich da was falsch verstanden. Aber das kann ja wirklich nicht sein.
Zudem verwundert mich eben, dass man es ja so machen MUSS, wenn man den Thread anhalten und wieder starten will. Also kann das ja eigentlich schon gleich zweimal nicht sein!
Ich hoffe ihr habt verstanden worum es mir geht und könnt mir helfen.
PS: ich hoff ich war zur abwechslung mal nettiquette - Konform

Zuletzt bearbeitet: