Einzelnen Beitrag anzeigen

juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
142 Beiträge
 
Delphi XE5 Professional
 
#1

Zeitkritisch Thread

  Alt 9. Jun 2024, 18:01
Liebe Delphi Gemeinde,
ich bin seit den 2000er Jahren bis heute treuer Anhänger von Delphi (mit Delphi 3 angefangen).
Zur Zeit arbeite ich mit Delphi 11.2 auf Windows 10.
Da ich Funkamateur bin (DG5UAP) will ich ein Programm schreiben, welches von den Wettersatelliten (NOAA) die Wetterbilder (FAX) empfängt
und anzeigt.
Ich bin auch schon ganz schön weit gekommen.
Dazu benutze ich das Audiosignal von der Soundkarte mit dem Tool BASS.dll.
Das FAX liegt auf 2400 Hz im Volumen (0%=Schwarz, 100%=Weiß) mit 64 Graustufen in der Geschwindigkeit von 120 Baud.
Und nun stosse ich an die Grenzen von Delphi.
BASS.dll übergibt standardmässig alle 100ms die Audiodaten. Das ergibt aber nur 10 Baud.
Man kann natürlich den Zeitintervall in BASS.dll einstellen, ich bräuchte einen Zeitintervall von 8ms = 125 Baud.
Ob BASS.dll das mit macht weiss ich nicht.
Des wieteren müssen die anfallenden Daten ja verarbeitet werden und das bracht auch Zeit.
Zur Zeit komme ich da auf 200ms pro Datenstream.
Für BASS.dll rufe ich die Daten mit BASS_RecordStart(0,2,0,@RecordingCallback,nil); ab.
In der Routine RecordingCallback(Handle: HRecord; buffer: Pointer; length: DWord; user: Pointer): boolean; stdcall; bekomme ich die Daten geliefert.
Da das alles zu langsam ist habe ich mir folgendes ausgedacht (weiss nicht ob das die beste Lösung ist).
Ich mache einen Thread, dem ich die Daten von BASS.dll in einer Pipeline übergebe.
Dann spielt es keine Rolle wie lange der Thread braucht (der hinkt dann natürlich immer nach).
Ich brauche aber auch Rückmeldungen vom Thread für maine Main-Unit, damit ich globale Variablen laden kann.
In der Routine RecordingCallback brauche ich dann nur die Daten in die Pipeline stellen und den Trhread aufrufen. Das sollte in 8ms zu machen sein.
Sowas habe ich noch nie gemacht und ich brauche Eure Hilfe.
1. Wie erzeuge ich aus Delphi einen Thread.
2. Wie gestallte ich eine Pipeline.
3. Wie gebe ich aus dem Thread Rückmeldunegn an die Main-Unit.
Wenn es geht gebt mit bitte Demosouce mit.
Anbei noch ein paar Bilder von dem was ich schon habe.
Bild1 = Empfang des Audiosignals mit Frequenzspectroskop (man sieht den 2400 Hz Peak gut).
Bild2 = Auswerung der empfangenen Signale mit Graphik des Volumen im 64 Stufen Raster.
Multispectralbild NOAA 19. So was sollte am Ende rauskommen.
Vielen Dank für Eure Hilfe.
Gruß
Jürgen
Miniaturansicht angehängter Grafiken
bild1.jpg   bild2.jpg   multispectralbild-31.05.24.jpg  
Jürgen Linder

Geändert von juelin ( 9. Jun 2024 um 18:06 Uhr)
  Mit Zitat antworten Zitat