Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Sendevorgang blockiert meine Software (https://www.delphipraxis.net/87209-sendevorgang-blockiert-meine-software.html)

C.Schoch 27. Feb 2007 20:40

Re: Sendevorgang blockiert meine Software
 
Hi,
Du bist auf dem richtigen Weg!
Hier mal ein erweitertes Bsp.:
Delphi-Quellcode:
var
MailThread : TMailThread;
dwWaitResult : DWORD;
begin
  MailThread := TMailThread.Create(true,Email,Opendiag.filename,globalcnt);
  MailThread.Resume; // Suspendeder Thread muss auch aufgeweckt werden
  repeat
    // Auf Thread warten
    dwWaitResult := WaitForSingleObject(MailThread.Handle, 100);
    if dwWaitResult <> WAIT_OBJECT_0 then
    begin
      if dwWaitResult = WAIT_FAILED then //Abbrechen wenn fehlgeschlagen
        break;
      Application.ProcessMessages; // GUI aktualisieren
    end;
  until dwWaitResult = WAIT_OBJECT_0; // keinen Thread mehr zum warten
  FreeandNil(MailThread); // Thread freigeben
end;
Vor oder nach FreeeandNil kannst du noch Aktionen ausführen z.B.: Fehler auswerten usw.
Das Thread Objekt "MailThread" würde ich global definieren so kannst du auch vom Abbrechen Button drauf zugreifen.
Jeder Thread besitzt außerdem die Eigenschaft Terminated mit der dieser abgebrochen werden kann.
Den abbruch einer laufenden Übertragung musst du IMO im OnTerminate vornehmen.

Wo der Runtime Error herkommt weis ich auch nicht, aber neue Frage neuer Thread!

P.S.: Einfach mal nach TThread in der Delphi Hilfe schauen.
P.P.S.: Hast du eigentlich schon mal die DP Suche benutzt Hier im Forum suchenThreads?

skyquaker 27. Feb 2007 21:04

Re: Sendevorgang blockiert meine Software
 
Zitat:

Zitat von C.Schoch
Hi,
Du bist auf dem richtigen Weg!
Hier mal ein erweitertes Bsp.:
Delphi-Quellcode:
var
MailThread : TMailThread;
dwWaitResult : DWORD;
begin
  MailThread := TMailThread.Create(true,Email,Opendiag.filename,globalcnt);
  MailThread.Resume; // Suspendeder Thread muss auch aufgeweckt werden
  repeat
    // Auf Thread warten
    dwWaitResult := WaitForSingleObject(MailThread.Handle, 100);
    if dwWaitResult <> WAIT_OBJECT_0 then
    begin
      if dwWaitResult = WAIT_FAILED then //Abbrechen wenn fehlgeschlagen
        break;
      Application.ProcessMessages; // GUI aktualisieren
    end;
  until dwWaitResult = WAIT_OBJECT_0; // keinen Thread mehr zum warten
  FreeandNil(MailThread); // Thread freigeben
end;
Vor oder nach FreeeandNil kannst du noch Aktionen ausführen z.B.: Fehler auswerten usw.
Das Thread Objekt "MailThread" würde ich global definieren so kannst du auch vom Abbrechen Button drauf zugreifen.
Jeder Thread besitzt außerdem die Eigenschaft Terminated mit der dieser abgebrochen werden kann.
Den abbruch einer laufenden Übertragung musst du IMO im OnTerminate vornehmen.

Wo der Runtime Error herkommt weis ich auch nicht, aber neue Frage neuer Thread!

P.S.: Einfach mal nach TThread in der Delphi Hilfe schauen.
P.P.S.: Hast du eigentlich schon mal die DP Suche benutzt Hier im Forum suchenThreads?

THX ! Weds morgen ausprobieren

Ja ich hab mir schon einige Dinge über Threads angeschaut, habs aber net hingekriegt. *schäm*


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.
Seite 2 von 2     12   

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