AGB  ·  Datenschutz  ·  Impressum  







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

AsyncPro ComPort blockierend

Ein Thema von Blamaster · begonnen am 18. Feb 2015 · letzter Beitrag vom 19. Feb 2015
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

AsyncPro ComPort blockierend

  Alt 18. Feb 2015, 13:04
Delphi-Version: 7
Hi,

ich habe mal eine kurze Frage. Folgendes "Problem" ich muss Pakete über einen ComPort senden. Momentan setze ich dafür AsyncPro ein. Soweit funktioniert das auch ohne Probleme.

Allerdings muss ich zwischen den Paketen eine feste Mindestwartezeit einhalten. AsynchPro ist wie der Name vermuten lässt allerdings asynchron arbeitend. Wenn ich Daten sende landen Sie in einem Buffer der vom AsyncThread "irgendwann mal" bearbeitet wird.

Ich kann im Hauptprogramm zwar sicherstellen das der Send Befehl des ComPort mit einem Mindestabstand von x ms aufgerufen wird aber um wirklich eine Wartezeit zwischen den Paketen garantieren zu können müsste ich sowas wie ein blockierendes senden haben das erst dann zurückkehrt, wenn die Daten auch wirklich den Sendepuffer verlassen haben bzw besser noch von der Windows API verarbeitet wurden.

Weiß da zufällig jemand ob AsyncPro das in iregendeiner Form unterstützt ?
  Mit Zitat antworten Zitat
yogie

Registriert seit: 11. Sep 2003
Ort: bei Goslar
213 Beiträge
 
Delphi 6 Professional
 
#2

AW: AsyncPro ComPort blockierend

  Alt 18. Feb 2015, 15:07
Hallo,
bin gerade im Dienst, kann also nicht nachschauen.
Ich meine es gibtsowas wie ein Flush, dann wird der Buffer
auf jeden Fall gesendet (FlushOutBuffer)
Kompatibilität ist ein Euphemismus für n i c h t einhunderprozentige Austauschbarkeit
http://b-und-l-service.de/
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#3

AW: AsyncPro ComPort blockierend

  Alt 18. Feb 2015, 16:02
Also wenn es denn blockieren soll, dann kannst Du doch auch mit den ganz normalen FileHandling-Routinen ohne den ganzen Overlapped-Firlefanz arbeiten.
Allerdings kann ich mir nicht vorstellen, dass Du damit zum Ziel kommst. Deine Daten werden an den Treiber übergeben, der übergibt das an den IO-Chip und der hat auch wieder einen Ausgangspuffer von 16..128 Bytes. Ich würde da leise Zweifel anmelden, ob Du die Information "alles ist raus" wirklich zuverlässig bei allen Hardware-Konstellationen bekommst. Da kannst Du eigentlich auch gleich selber anhand der verschickten Datenmenge und der Bitrate ausrechnen, wie lange das senden dauert und wann Du folglich das nächsten Datenpacket schicken musst/kannst.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#4

AW: AsyncPro ComPort blockierend

  Alt 19. Feb 2015, 09:55
@yogie

Der Tipp klang vielversprechend. Ich habe den FlushOutBuffer gerade mal getestet aber das Verhalten ist ein anderes. So wie es aussieht leert FlushOutBuffer einfach "hart" den Sendepuffer aber nicht durch das sofortige senden der Daten, sondern durch das entfernen aus der Queue. (Nach dem Flush geht das vorher gesendete Paket verloren das ließ sich so über einen API Monitor nachvollziehen)

@samso

Direketer Zugriff über das Filesystem wäre zwar möglich allerdings würde ich den Komfort einer fertigen lib schon schöner finden zumal das blockieren auch nur beim senden gewünscht ist. Beim empfangen sind die asynchronen Fähigkeiten der libs schon wünschenswert.

Ich fürchte auch das eine direkte "alles ist raus" Erkennung eventuell nicht genau erkennbar ist. Ich bin aber aber relativ sicher das wenn die Daten erstmal an die API übergeben wurden auch recht zügig versendet werden. Ich glaube kaum das bei einer ComPort Übertragung die API da zwischen den Bytes großartig lange Pausen macht.

Mir würde bei der blockierenden Sendefunktion schon ausreichen zu wissen das die Daten den Sendepuffer des Threads verlassen haben und an die API weitergegeben wurden.
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz