Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Thread pausieren lassen und aufwecken (https://www.delphipraxis.net/108745-thread-pausieren-lassen-und-aufwecken.html)

Muetze1 19. Feb 2008 20:15

Re: Thread pausieren lassen und aufwecken
 
Zwei grundlegende Dinge zu TThread:

1. Kein Application.ProcessMessages aufrufen. Du befindest dich ein einem Thread der asynchron zum VCL Thread läuft (den du mit Application.ProcessMessages indirekt aufrufst)
2. Kein Zugriff auf irgendwelche Formulare oder VCL Komponenten aus dem Thread heraus, Ausnahme: Die Zugriffe erfolgen in einer Thread Methode oder Form Methode, welche über die Delphi-Referenz durchsuchenTThread.Synchronize() Methode aufgerufen werden.

Quo 20. Feb 2008 00:20

Re: Thread pausieren lassen und aufwecken
 
Zitat:

Zitat von Muetze1
Zwei grundlegende Dinge zu TThread:

2. Kein Zugriff auf irgendwelche Formulare oder VCL Komponenten aus dem Thread heraus, Ausnahme: Die Zugriffe erfolgen in einer Thread Methode oder Form Methode, welche über die Delphi-Referenz durchsuchenTThread.Synchronize() Methode aufgerufen werden.

Vielen Dank Muetze1!!! jetzt habe ich alles so moderniesiert das ich mit suspend mein thread anhalten und mit resume weiterforsetzen kann. Ihre Anmerkung war entscheidend!!!

Quo 20. Feb 2008 00:25

Re: Thread pausieren lassen und aufwecken
 
Zitat:

Zitat von sirius
Das wäre jetzt ein Beispiel für Event und waitforsingleobject. Allerdings habe ich nicht direkt die API-Funktionen benutzt, sondern eine Klasse, die genau diese Funktionen kapselt/benutzt.

Vielen dank für Ihr beispiel,das war sehr hilfsreich und verständlich.Jetzt kann aus meiner Schleife "raus"- thread anhalten , serielle Schnittstelle benutzen und die Schleife weiter laufen lassen.
Endlich kann ich meinen Code erweitern:)))

ich habe das ganze einbißchen umgeändert und folgendes bekommen:

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,syncobjs;

type TmyThread=class(TThread)
     public
      procedure go;
     private

     protected
       procedure execute; override;
     end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);





  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

     Anzeige:TMyThread ;
  end;

var
  Form1: TForm1;
  i:integer;
   a,b:boolean;
    event:TEvent;
implementation

{$R *.dfm}
procedure TmyThread.execute;
//var event:TEvent;


begin
//Zugriff aus dasselbe Event
event:=TEvent.Create(nil,true,false,'myEvent');

 while(not terminated) do
  begin
   event.waitfor(infinite);


  //mach etwas
   i:=i+1;
   sleep(100);
    form1.Edit1.Text:=inttostr(i);




  Synchronize(go);

  end;
 event.free;
end;



procedure TmyThread.go;
begin
if a=false then

event:=TEvent.Create(nil,true,false,'myEvent');

form1.Edit1.Text:=inttostr(i);
end;

procedure TForm1.Button1Click(Sender: TObject);
var thread:TmyThread;
begin

  label1.Caption:='warte';

  //event:=TEvent.Create(nil,true,false,'myEvent'); //Event anlegen (mit Namen)

  with Tmythread.Create(true) do //Thread starten
  begin
    FreeOnTerminate:=true;
    resume;
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
event.SetEvent;
event.Free;

a:=true;
end;

procedure TForm1.Button3Click(Sender: TObject);// Schleife anhalten bzw. Event anlegen!
begin
a:=false;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
a:=true;
end;



end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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 by Thomas Breitkreuz