Re: Threads & Hwcom Kategorie: Programmierung (von André H. - 26.10.2003 10:02) | |
Als Antwort auf Threads & Hwcom von Mike - 24.10.2003 14:25
| |
Hallo Mike, > Ich möchte ein Programm mit 3 verschiedenen threads machen: > > thread one > thread two > thread main > > Mein Programm sieht so aus: > > ... > ... > > eigentlich recht simpel, aber er gibt "THREAD MAIN" über die HWCOM nicht aus. nur die ersten paar > buchstaben. In Deinem Proggie stimmen mehrere Sachen nicht: 1. Die Initialisierung Bei Dir läuft diese im Main-Thread in einer schleife und wird immer wieder durchgeführt. Das führt bei jedem Durchlauf zu einem "Reset" der Schnittstelle und derren Puffer. Darum führe den Init nur einmal aus: thread main { hwcom.init(); hwcom.setspeed(speed); //... loop { //.. // Programmcode, der in einer Schleife im Mainthread // ausgeführt werden soll } } 2.Warum setzt Du die Thread-Prio vom Mainthread auf "1" ? Das macht den Thread und auch die CC2 unötig langsam. Man sollte die Prio nicht kleiner 20 setzen. (Standard ist 32) 3. Man sollte nicht ungecaptured von mehreren Thread auf die Schnittstelle zugreifen. Das gibt in 99,9% der Fälle einen Datensalat. Jedoch mu� dann mit einem definiertem Protokoll gearbeitetet werden. Zwar macht dies in Deinen Threads "one" und "two" nicht viel aus, da durch die sleeps ein Threadwechsel erzwungen wird, und der komplette thread innerhalb der durch run vorgegeben Anzahl von VM-Instruktionen abgearbeitet werden kann, jedoch können u.U. dennoch Fehler auftreten, da die Ausgaben nicht gecaptured sind. Hier helfen auch nicht die captures in den hwcom-Funktionen. Damit Dein Testproggie korrekte Ausgaben mache, müsste es so aussehen: thread one { sleep 1000; cap.Capture(0); hwcom.print("thread one"); hwcom.ret(); cap.release(0); } thread two { sleep 1000; cap.Capture(0); hwcom.print("thread two"); hwcom.ret(); cap.release(0); } thread main { hwcom.init (); hwcom.setspeed(hwcom.SPEED_9600); hwcom.put(12); // clear screen run one; run two; loop { cap.Capture(0); hwcom.print("thread main"); hwcom.ret(); cap.release(0); yield; } MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: |