Hallo,
ich habe ein Threadobjekt TCapture, welches Daten von einer Soundkarte aufnimmt.
Das ganze funktioniert über Windows Messages, die der Thread.Execute weiterleitet:
Delphi-Quellcode:
procedure TCapture.Execute;
var msg:Tmsg;
begin
Fwnd:=allocatehwnd(WndProc); //hier ist jetzt dein Windowhandle für MMAudio
try
if StartCapture then
while getMessage(msg,0,0,0) do //warten auf Message
DispatchMessage(msg) //verteilen auf das entsprechende Fenster
else SetFailed(true);
finally
logging:=false;
LogStop;
LogClose;
Deallocatehwnd(Fwnd);
end;
end;
So weit so gut. Jetzt folgende Zusatzaufgabe für den Thread:
Er soll einigermaßen genau t Millisekunden nach dem Aufruf StartCapture einmalig eine Procedure aufrufen.
Wie mache ich das am geschicktesten?
Bisher habe ich das außerhalb des Threads gemacht, ist aber bei CPU Lastschwankungen zu unzuverlässig, daher muss das in den Hochprioritätsthread mit hinein.
Kann ich innerhalb des Threads ein Timerobjekt erzeugen, welches mit derselben Prio läuft wie der Thread? Oder baue ich besser die getMessage-Schleife auf peekMessage um und frage regelmäßig die Tickcounts ab und wenn ja, wie würde das mit peekMessage konkret aussehen?
Danke, Thomas