AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitkritisch Thread

Ein Thema von juelin · begonnen am 9. Jun 2024 · letzter Beitrag vom 10. Jun 2024
 
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
Angehängte Grafiken
Dateityp: jpg bild1.jpg (218,3 KB, 45x aufgerufen)
Dateityp: jpg bild2.jpg (204,9 KB, 40x aufgerufen)
Dateityp: jpg Multispectralbild 31.05.24.jpg (258,4 KB, 43x aufgerufen)
Jürgen Linder

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

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz