-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
N'Abend SirThornberry,
das stimmt. Es gibt evtl. sogar noch ein paar weitere Punkte an denen es zu Komplikationen kommen könnte z.B. hier, falls irgendein Ereignis zugewiesen ist.
if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
Aber man könnte sich ja das ProcessMessages für den TThread einfach selbst schreiben durch:
(verkürzt)
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
Hallo Christoph,
die Audioauswertung in zwei Threads auszulagern sehe ich nicht als besonder sinnvoll an. Es funktioniert ja in einem Thread bereits wunderbar. Das Problem war ja nur, dass der Thread in einer Schleife Application.ProcessMessages ausführen muss, damit das Ereignis überhaupt ausgelöst wird. Das müßte einer Deiner beiden Threads ja trotzdem machen, sonst würde er das Ereignis...
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
Hallo,
ich habe jetzt nochmal ein bißchen rumprobiert und vertrete weiterhin die Meinung, dass der Thread nicht die Messages des Hauptthreads "bekommt".
Dazu habe ich die MessageQueue des Hauptthreads "aufgefüllt" und mit sleep(x) die Verarbeitung angehalten, während im TThread weiter Application.ProcessMessages ausgeführt wurde. Nach dem Sleep habe ich die Messages in ein Memo schreiben...
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
Mahlzeit,
An diese Möglichkeit hatte ich bereits gedacht, diese allerdings ausgeschlossen, weil wenn der Hauptthread hängt, gehen Puffer verloren. Das Event wird ja erst dann ausgeführt, wenn der Hauptthread wieder "idle" ist. Einfaches Beispiel:
Wird ein Sleep(10000) im Hauptthread ausgeführt (oder eine Operation, die solange dauert), wird erst im Anschluss daran, also nach 10 Sekunden...
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
So, zunächst zu :
Da bin ich anderer Meinung. Also die Audiokomponente läuft asynchron (soweit ich das beurteilen kann). Sie löst immer dann, wenn der Puffer voll ist ein Event aus (reagiert intern auf MM_WIM_DATA) und dann wieder beim nächsten vollen Puffer usw. (ohne den Prozessablauf anzuhalten). Dennoch möchte ich die Verarbeitung in einem Thread durchführen, damit 1. der Hauptthread...
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
Die einzige Aktion die ich im Hauptthread ausführe ist die Übergabe an ein Array. Es wird nichts gezeichnet, geupdatet o.ä. Aber, wie bereits gesagt, ist die Übergabe auch nicht das Problem.
BufferFilled ist eine Prozedur des Threads.
Die Fehlermeldung kommt durch das "Application.ProcessMessages" in der Schleife. Selbst wenn die Übergabe an den Hauptthread komplett herausgenommen wird,...
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
Hi Xaromz,
der wichtigeste Teil des Codes ist eigentlich oben gepostet. Die AudioKomponente ruft halt das Ereignis OnBufferFilled auf, sobald der Puffer voll ist. Den Verarbeite ich dann und übergebe ihn ggf. an den Hauptthread.
Das Problem ist ja nur diese Schleife:
while not Terminated do
begin
sleep(100);
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
Ich denke Synchronize wird das Problem nicht lösen, denn ich möchte ja gar nichts im Hauptthread ausführen. Das Application.ProcessMessages (bzw. die jetzt gesuchte Alternative) soll ja nur dafür sorgen, dass der Thread seine eigenen Events behandelt.
Die Übergabe an den Hauptthread erfolgt dann unter Verwendung von CriticalSections. Die Übergabe ist aber auch nicht das Problem.
Grüsse...
-
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by DocE,
6. Okt 2006
Hallo miteinander!
Es stellt sich folgende Problematik:
In einem TThread werte ich Audiosignale aus. Hierzu verwende ich in dem Thread eine Komponente, die die Arbeit übernimmt und ein Ereignis auslöst, sobald der Puffer voll ist. Damit die Events überhaupt abgearbeitet werden, muss ich Application.ProcessMessages in einer Schleife aufrufen.
Das Problem ist, dass es dadurch gelegentlich...