Hallo liebe Delphigemeinde,
ich habe ein Programm gemacht, welches Daten von der Soundkarte holt und diese bearbeitet.
Da ich die Daten sehr schnell brauche rufe ich im Mainthread alle 8 ms einen Routine auf, welche die Daten bereit stellt
und einen zweiten Thread zur verarbeitung von den Daten startet.
Das ganze soll so 10-15 Minuten laufen.
Das sind 112500 Threads die ich in 15 Minuten starte.
Die Routine die die Daten verarbeitet läuft ca. 200ms.
Das bedeutet, das nach 15 Minuten noch 112050 Threads laufen.
Das das den Rechner ordentlich belastet brauche ich wohl nicht erwähnen.
Nun zu meinem Problem:
Im Maintrhread habe ich eine Menüleist, mit der ich den Vorgang starte und stoppe.
Aber wenn das Programm mit den Threads läuft kann man die Menüleiste nicht mehr bedienen.
Hat da jemand eine Idee?
Anbei die Routine die die Threads startet (alle 8 ms).
Delphi-Quellcode:
function RecordingCallback(
Handle: HRecord; buffer: Pointer; length: DWord; user: Pointer): boolean;
stdcall;
var rueck: Boolean;
var x1: integer;
var x2: Cardinal;
var ThreadHandle: THandle;
var ThreadId: DWORD;
var test7: PAnsiChar;
var test8: integer;
var test9: PAnsiChar;
begin
rueck:=False;
if Length > 0
then
begin
x2:=WaveStream.
Write(buffer^,length);
THreadNum:=Threadnum+1;
rueck:=True;
BASS_ChannelGetData(ChannelInput, @FFTData0, BASS_DATA_FFT4096);
GetMem(test9, 8192);
test7:=@FFTData0;
for test8:=0
to 8191
do
begin
test9[test8]:=test7[test8];
end;
adresse:=test9;
ThreadHandle:=BeginThread(
nil, 0, TFNThreadStartRoutine(@Berechnen),
nil, 0, ThreadId);
if ThreadHandle <> 0
then CloseHandle(ThreadHandle);
end;
Result:=rueck;
end;
Danke für die Hilfe und Gruß
Jürgen