AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Eigene Klasse für USB-Zugriff soll Event erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Klasse für USB-Zugriff soll Event erzeugen

Ein Thema von Alloc · begonnen am 11. Sep 2006 · letzter Beitrag vom 15. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#1

Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 11. Sep 2006, 23:43
Hi,

hab hier mal wieder ein Problem
Ich habe eine eigene Klasse geschrieben, welche den Zugriff auf ein USB-Gerät (FT232RL-Chip) verwaltet. Funktioniert auch alles. Jetzt will ich aber, dass diese Klasse ein Event hat, welches dann ausgelöst wird, wenn Daten *empfangen* werden. Die USB-DLL liefert dafür natürlich kein Event, das heisst ich müsste irgendwie innerhalb der Klasse regelmäßig den Zustand des Empfangspuffers abfragen. Hab mir schon überlegt das über einen Timer zu machne, welchen ich in der Klasse erzeuge, das kommt mir aber relativ unschön vor ... Eine weitere Idee wäre, einen endlos-Thread in der Klasse zu erzeugen, bin mir aber auch hier nicht sicher, dass das das beste wäre.

Wie kann ich das ganze am Besten machen?

Grüße,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 06:17
In meiner HID-Komponente (Teil der JVCL oder als Standalone von http://www.soft-gems.net/HID.php) mache ich das mit einem Thread.
Setzt man den Event, so wird der Thread gestartet der dann permanent liest. Es wird dann ein Event im thread generiert, der natuerlich synchronisiert werden muss.

Ein Timer ist nicht nur unschoen, sondern komplett ungeeignet.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 07:36
Hi,

schreibe einen sogenannten Eventhandler der als Thread ausgelegt ist. Mit erzeugen eines Handle auf den USB-Port startest du diesen Thread, der permanent den Zustand des empfangspuffers abfragt und Änderungen nach "oben" reicht. Wie alloc sagt, syncronisieren nicht vergessen. Als Ereignis creierst du eine eigene Methode wie z.B. OnReceiveEvent ....

In dieser Form werden eigentlich alle üblichen klassen die schreib- leseereignisse handeln aufgebaut.

gruß oki
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 13:48
Danke schonmal an euch beide für eure Antworten =)

Zitat von Robert Marquardt:
Es wird dann ein Event im thread generiert, der natuerlich synchronisiert werden muss.
Was genau bedeutet dabei das "synchronisieren"?
Und muss ich beim Thread irgendwas beachten? Also zB Sleeps einbauen, damit der nicht mit der Endlosschleife die CPU auffrisst?

Gruß,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 14:13
Hi alloc,

ja, syncronisieren mit:
procedure Synchronize(Method: TThreadMethod); Die Delphi-Hilfe erklärt das was und wie und warum sehr gut.

Im Execute macht sich ein Sleep(10) in der Schleife immer gut.

Gruß oki
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 15:53
K, danke, es funktioniert wie ich mir das vorgestellt habe

Gruß,
Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 17:04
Das mit den Sleeps kommt auf die Lesefunktion an. Du erwaehnst das du ein von der DLL exportierte Read-Funktion verwendest (zumindest implizierst du es).
Das duerfte ein blockierendes Read sein, d. h. der Aufruf kommt erst zurueck wenn Daten angekommen sind (und hoffentlich auch wenn das Geraet ausgesteckt wird).
Damit hast du natuerlich ein Problem den Thread wieder zu beenden, denn er haengt ja in der Read-Funktion fest.

In meiner HID-Komponente ist das mit ReadFileEx und SleepEx geloest.
ReadFileEx kommt gleich zurueck und dann wird mit SleepEx gewartet bis bis der asynchrone ReadFileEx-Aufruf Daten liefert.
SleepEx bewirkt das der Thread regelmaessig aufwacht und damit beendbar ist.
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 17:09
Die DLL exportiert auch eine Funktion mit der man den Queue-Status abrufen kann und somit wird nur dann die Read-Funktion aufgerufen, wenn auch was zum Lesen vorhanden ist. Sollte also hoffentlich keine Probleme bereiten =)

Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 17:17
Na dann hat der Thread einfach eine while not Terminated-Schleife in der er mit Sleep ein bischen schlaeft, den Queue-Status abfragt und bei Daten den Event ausloest.
Das muss man machen damit der Thread nicht zuviel Rechenzeit verballert. Das Sleep muss so abgewogen werden das man oft genug Daten bekommen kann, denn man kann sie dann nur noch im Sleep-Raster bekommen.
Natuerlich sollte man die queue immer komplett leerlesen und eventuell mehrere Events ausloesen, sonst laeuft die Queue moeglicherweise voll.
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Eigene Klasse für USB-Zugriff soll Event erzeugen

  Alt 12. Sep 2006, 23:06
Jo, genau so läuft es jetzt auch. Sind nur so 5 Code-Zeilen oder so im Execute
Allerdings ist das Leerlesen des Buffers Anwender-Prog-Sache. Dh das Event meldet nur dass Daten da sind und wieviele und das Prog muss die dann abholen (so macht es zb auch CPort).

Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:38 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