AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Anwendung blockiert wenn das Fenster gezogen wird

Anwendung blockiert wenn das Fenster gezogen wird

Ein Thema von Poolspieler · begonnen am 11. Sep 2005 · letzter Beitrag vom 11. Sep 2005
Antwort Antwort
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#1

Anwendung blockiert wenn das Fenster gezogen wird

  Alt 11. Sep 2005, 11:28
Hallo,
ich habe ein Programm geschrieben, welches nach einem Buttonclick mit einem USB-Gerät kommuniziert und die Daten auf dem Bildschirm ausgiebt. Das funktioniert so weit auch gut (die Kommunikation mit dem USB-Gerät ist aber äußerst Zeitkritisch!)

Problem:
Wenn der User das Hauptfenster mit der Maus verschiebt, dann scheint meine Anwendung für die Dauer des gedrückten Mausknopfs zu "stehen". Durch diese Blockierung (ich schätze, der Algorithmus steht bei hauptfenster.update) wird die Kommunikation mit dem USB-Gerät unterbrochen

Hat jemand eine Idee dieses Problem zu lösen:
- ohne einen zweiten Thread zu nutzen?
- ohnen einfach den Rahmen des Hauptfensters zu verstecken?

Vielen Dank schon mal

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Anwendung blockiert wenn das Fenster gezogen wird

  Alt 11. Sep 2005, 11:39
Ich glaube, du wirst wohl nicht umhin kommen, einen eigenen Thread für die Kommunikation mit dem USB-Gerät zu nehmen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Anwendung blockiert wenn das Fenster gezogen wird

  Alt 11. Sep 2005, 13:15
Genau, aber selbst dann kann Windows dir ans Bein pissen. Fenster mit der Maus ziehen ist in Windows grottenschlecht implementiert und kann leicht 100% CPU-Last erzeugen.
BTW was machst du denn genau mit USB?
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Anwendung blockiert wenn das Fenster gezogen wird

  Alt 11. Sep 2005, 13:22
Das trifft mich hart, denn mein Projekt steht im Prinzip schon und es bedeutet wahrscheinlich einen hohen Aufwand, es in Threads umzuschreiben

Das USB-Gerät ist ein von mir geschriebener µC der über einen FTDI-Chip mit dem PC kommuniziert.

Die komplette Komunikation erledigt eine einzige Klasse, die erstmal von dem Formular gekapselt ist - und das ist ja auch gut so ...
Lediglich im Konstruktor dieser Klasse wird z.B. ein Zeiger auf einen Chart mitgegeben.
Wird die Startmethode (meineKlasse.start() ) der Klasse aufgerufen, so werden Daten vom USB-Gerät empfangen und direkt auf dem Chart ausgegeben (inklusive eines "Update-Aufrufs"...)
Problem beim ziehen des Fensters: Das USB-Gerät schickt weiter Daten, die in den Puffer des FTDI-Treibers geschrieben werden. Umso länger die Anwendung blockiert ist, umso mehr Daten werden gepuffert, was natürlich zum Problem werden kann (nicht muss...)

Wenn nun diese Startmethode einen eigenen Thread starten würde, wie müßte ich dann die Echtzeitanzeige realisieren - ist das Stichwort TThread.synchronisize? Oder bin ich dann genauso weit? Sorry, aber mit Threads habe ich noch nicht viel programmiert...

Ich habe auch schon ein wenig gegoogelt. Es ist wohl erstmal gar nicht so einfach, von einem zweiten Thread direkt z.B. den Text eines Labels zu ändern.
--> Dort kamen dann Vorschläge wie: Starte vom Thread einen zweiten Thread, der dann die Daten im Formular ausgiebt --> das klingt irgendwie kompliziert, wenn man mich fragt...

Hat jemand bessere Ideen?

Gruß

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Anwendung blockiert wenn das Fenster gezogen wird

  Alt 11. Sep 2005, 13:25
Ist es ein HID-Geraet?
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Anwendung blockiert wenn das Fenster gezogen wird

  Alt 11. Sep 2005, 13:33
Nicht ganz:

Mit diesem Chip kannst Du einen USB-Serial-Wandler bauen.
Wenn man den Serial-Treiber verwendet, dann taucht das Gerät im Gerätemanager als COM-Port auf und kann natürlich auch als solcher verwendet werden.
Ich habe den anderen Treiber verwendet, damit ist man noch etwas flexibler und hat ein paar mehr Features. Man kann z.B. jedem Gerät einen eindeutigen Namen geben (der wird in einem EEPROM gespeichert)
Hier der Link zum Chip: Webseiten-Titel

Im Prizip kann man sich das USB-Gerät aber als COM-Port mit ASCII-Interface vorstellen.
Die erste Version davon konnte man auch mit dem Hyperterminal bedienen (bevor ich auf den anderen Treiber umgestiegen bin...)

Gruß

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Anwendung blockiert wenn das Fenster gezogen wird

  Alt 11. Sep 2005, 18:44
Bei USB musst du mir nichts erklaeren.
Ein USB nach RS232-Adapter also. Warum sprichst du ihn nicht als COM Port an?
Async Pro z. B. duerfte sowieso mit Threads arbeiten.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22: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