Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: progamm bleibt stehen, wenn formular angeklickt wird...

  1. #1
    Registriert seit
    22.05.2007
    Beiträge
    27
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich hab in delphi 5 ein programm geschrieben, dass prinzipell gesehen folgendes ausführt:

    wenn button gedruckt wird, dann aktiviere den clientsocket.
    wenn clientsocket connected, dann sende befehl zur datenübermittlung
    wenn clientsocket daten empfängt, dann werte empfangene daten aus und sende erneut befehl zur datenübermittlung.

    das ganz läuft also zyklisch ab, das funktioniert auch einwandfrei, solang man nicht den formularkopf (wo die Bezeichung der Formulars drin steht) anklickt oder eben versucht das fenster zu verschieben, dann bleibt das programm für einen kurzen moment "stehen" und die zyklische abarbeitung wird somit nicht weiter ausgeführt.
    ich habe keinerlei ereignisse für das formular programmiert und kann mir nicht erklären woher das kommt. falls das normal ist, gibts denn da eine möglichkeit das zu unterdrücken?
    danke
    Zitieren Zitieren progamm bleibt stehen, wenn formular angeklickt wird...  

  2. #2
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard

    Zitat Zitat von tycomatze Beitrag anzeigen
    ich habe keinerlei ereignisse für das formular programmiert und kann mir nicht erklären woher das kommt. falls das normal ist, gibts denn da eine möglichkeit das zu unterdrücken?
    danke
    Ich gehe mal davon aus, daß du die Daten im Event einer TClientSocket-Komponente entgegennimmst, die Du auf das Formular gezogen hast. Damit erfolgt die Abarbeitung im Main-Thread Deiner Anwendung. Im gleichen Thread werden von Delphi auch die Windows-Botschaften beim Verschieben des Fensters verarbeitet. Dadurch kommt es zu der Verzögerung in Deinem Ablauf.

    Pack die Kommunikation in einen eigenen Thread, in dem Du dann die Instanz vom TClientSocket im Programmcode erzeugst (ein Thread hat kein Formular). Falls Du im Event von TClientSocket Daten in VCL-Komponenten schreibst, mußt Du aufpassen, weil viele VCL-Komponenten (vor allem die visuellen) nicht threadsafe sind !


    Gruß Axel
    Man muß sparn wo mn knn!

  3. #3
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    weil viele VCL-Komponenten (vor allem die visuellen) nicht threadsafe sind !
    Nicht nur viele VCL-Komponenten, sondern alle VCL-Komps in der Applikation. Dafür gibt es die Methode "Synchronize", aber eine Parameterübergabe von einem Thread zum Hauptprogramm ist nicht möglich. Eigentlich auch logisch, man muss halt selber dafür sorgen, dass alles threadsafe ist.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Synchronize  

  4. #4
    Registriert seit
    19.09.2005
    Ort
    Freudenstadt
    Beiträge
    811
    Danke
    64
    Erhielt 101 Danke für 64 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Question_mark Beitrag anzeigen
    Nicht nur viele VCL-Komponenten, sondern alle VCL-Komps in der Applikation.
    So die offiziellen Angaben, aber mit einigen Eigenschaften von der einen oder anderen Komponente habe ich schon die Erfahrung gemacht, daß man sie auch aus anderen Threads heraus beschreiben kann. Im Zweifelsfalle muß man einfach mal einen Blick in den Quellcode der Komponente werfen (sofern man den hat ).

    Zitat Zitat von Question_mark Beitrag anzeigen
    Dafür gibt es die Methode "Synchronize", aber eine Parameterübergabe von einem Thread zum Hauptprogramm ist nicht möglich.
    Der Synchronize-Methode kann man zwar beim Aufruf keine Parameter für den Aufruf im Main-Thread mitgeben, eine Parameter-Übergabe läßt sich aber ganz einfach über private Felder im eigenen TThread-Nachfolger realisieren.

    Zitat Zitat von Question_mark Beitrag anzeigen
    Eigentlich auch logisch, man muss halt selber dafür sorgen, dass alles threadsafe ist.
    So isses ...


    Gruß Axel
    Man muß sparn wo mn knn!

Ähnliche Themen

  1. Maschine Aus -> Uhrzeit bleibt stehen
    Von EliteGurke im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.10.2010, 16:50
  2. Antworten: 0
    Letzter Beitrag: 09.09.2008, 11:39
  3. TON bleibt stehen :(
    Von steinche im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 21.11.2007, 08:07
  4. S5 Taktgenerator bleibt stehen
    Von Atlantik im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 13.10.2006, 21:38
  5. "higraph" bleibt stehen
    Von paed im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.02.2006, 16:19

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •