Wie Methode ständig aufrufen?
-
Hallo,
ich portiere gerade ein Windows-C Programm nach BCB. Das Programm steuert Diaprojektoren über RS232 mit einer zeitlichen Auflösung von 100ms. Deshalb wird in der Botschaftsverarbeitungsschleife bei Ablauf einer Diaschau ständig eine Funktion aufgerufen.
while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } if (bShowRunning) ShowRunning(hwnd); }Wie kann denn so was prinzipiell im BCB realisiert werden, da ich ja, nach meinem Kenntnisstand, keinen Zugriff auf die Botschaftsverarbeitungsschleife habe? Muß ich das über Threads lösen? Oder starte ich die Methode ShowRunning bei Bedarf und sorge dann mit Application->ProcessMessages() dafür, das anstehende Botschaften abgearbeitet werden?
Grüße
Gogo
-
Hallo
wieso solltest du mit dem BCB keinen Zugriff auf die Botschaftsverwaltung haben
es gibt mehrer Moeglichkeiten (Threads Timer ...)
(aber am besten mittels Threads)Wie genau muessen den die 100ms eingehalten werden ?
MfG
Klaus
-
KlausB schrieb:
wieso solltest du mit dem BCB keinen Zugriff auf die Botschaftsverwaltung haben
Ich dachte, mit Application->Run wird das Programm gestartet und kommt erst wieder aus dieser Methode zurück wenn es beendet wurde. Bin BCB-Einsteiger
Wie bekomme ich denn Zugriff auf die Botschaftsverwaltung? Ich bräuchte ein Stichwort für die Suche in der BCB-Hilfe.Wie genau muessen den die 100ms eingehalten werden?
+-30ms sind noch ok. Bei größeren Werten sieht oder hört man den Versatz zwischen Musik und Bild, wenn die Bilder im Takt der Musik gewechselt werden. Deshalb wurde bisher als Zeitbasis auch GetTickCount und keine Timer verwendet. Die Musik liefert ein Harddiskrecordingprogramm, das über eine DLL synchronisiert wird.
Um nicht allzu viele Ticks zu verpassen sollte die Methode deshalb so schnell als möglich hintereinander aufgerufen werden.
Grüße
Gogo
-
Klingt irgendwie wirklich als wäre ein Thread prädistiniert ^für die Verarbeitung deiner Funktion. Anhalten kannst du den Thread dann mittels z.B. Sleep. Als Echtzeitprioritätsthread betrieben dürftest du auch eine recht geringe Abweichung erzielen...
-junix