Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi #Thread starten (https://www.delphipraxis.net/67239-thread-starten.html)

www.Lars 11. Apr 2006 16:32


#Thread starten
 
Hei!

Ich starten in meinem Programm einen Thread, der aber aus welchen Gründen auch immer nicht losläuft. :? Irgendwo habe ich mal gelesen, dass es noch andere Möglichkeiten gibt, einen Thread zu starten außer mit der Thread.Create-Methode.

Kann mir jemand helfen?

Viele Grüße!

Lars

Die Muhkuh 11. Apr 2006 16:34

Re: #Thread starten
 
Hi,

zeig uns mal deinen Code, den du schon hast. Vielleicht finden wir den Fehler ;)

Matze 11. Apr 2006 16:35

Re: #Thread starten
 
Hi,

hast du mal etwas Code? Denn normalerweise wird, zumindest bei mir, generell das OnExecute-Event ausgelöst.

JasonDX 11. Apr 2006 16:38

Re: #Thread starten
 
Zitat:

Zitat von www.Lars
Irgendwo habe ich mal gelesen, dass es noch andere Möglichkeiten gibt, einen Thread zu starten außer mit der Thread.Create-Methode

Ja, es gibt noch weitere Moeglichkeiten, eine davon ist MSDN-Library durchsuchenCreateThread. Mit dieser kannst du allerdings nicht die TThread-Klasse aus der VCL verwenden, sondern musst eine Funktion schreiben, welche in einem neuen Thread ausgefuehrt wird.
Aber ich wuerde vorschlagen, dass du versuchst, die derzeitige Methode zum Laufen bringen, ich bin nicht gerade ein Fan von "Klappt nich, ich nehm was anderes" ;)

greetz
Mike

Roter Kasten, ergeben sie sich! Wir haben den Thread umstellt, kommen sie mit erhobenen Ecken raus!

www.Lars 11. Apr 2006 16:47

Re: #Thread starten
 
Code kommt...

Ist soweit ich weiß alles standardmäßig programmiert...

Delphi-Quellcode:
  (* Der Thread zur Durchführung der Messung *)
  TReadCOM1Thread = class(TThread)
  protected
    procedure execute; override;
  private
    function initAnalyzer:  integer;
    function eraseBufferIn: integer;
    procedure convertValue (answerStr: string; var valueReal: Real; var valueStr: string);
  public
    constructor create;
    function   startRemote: integer;
    function   stopRemote: integer;
  end;


  (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
  (* Der Konstruktor für den Thread                                     *)
  (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
  constructor TReadCOM1Thread.create;
  begin
    inherited Create(False);
    FreeOnTerminate:=True;
  end;



  (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
  (* Diese Funktion startet den Thread für die Messung                  *)
  (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
  function TCOM_Remote.startMeasurement: Integer;
  begin
    Form1.Label11.Caption := '0.000 nT   ';
    Form1.Label12.Caption := 'Keine Fehler.';
    measure := TReadCOM1Thread.create;   // Thread (Messung) starten
    result := 0
  end;


  (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
  (*                                                                     *)
  (* Thread ausführen                                                   *)
  (*                                                                     *)
  (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
  procedure TReadCOM1Thread.Execute;

  var
    mSec:        integer;               // msec des Zeitformats
    timeStamp1:  TDateTime;             // Zeitstempel
    ...

  begin
    setLength (tempFile, 2);             // Zunächst 2 Files zur Datenspeicherung
    timeStamp2 := now;                   // Zeitstempel initialisieren
    ...
  end;
[edit=alcaeus]Delphi-tags eingefuegt. In Zukunft bitte selbst machen. Mfg, alcaeus[/edit]

DataCool 11. Apr 2006 16:51

Re: #Thread starten
 
Hi,

meiner Meinung nach fehlt das Resume,
Du erzeugst den Thread ja suspended(s. in Deinem Create)
Deshalb musst Du wenn Du Deinen Thread erzeugt hast :

Delphi-Quellcode:
var myThd : TReadCOM1Thread ;
begin
  myThd := TReadCOM1Thread.create;
  myThd.resume; // startet den Thread
  // ....
end;
Gruß Data

Dax 11. Apr 2006 16:55

Re: #Thread starten
 
Erzeugt er das Ding nicht mit .Create(false)? :gruebel:

JasonDX 11. Apr 2006 16:55

Re: #Thread starten
 
Zitat:

Zitat von DataCool
Hi,

meiner Meinung nach fehlt das Resume,
Du erzeugst den Thread ja suspended(s. in Deinem Create)
Deshalb musst Du wenn Du Deinen Thread erzeugt hast :

Delphi-Quellcode:
var myThd : TReadCOM1Thread ;
begin
  myThd := TReadCOM1Thread.create;
  myThd.resume; // startet den Thread
  // ....
end;

Das hatte ich am Anfang auch im Kopf, aber:
In der Delphi-Hilfe steht
Delphi syntax:

constructor Create(CreateSuspended: Boolean);

Description

Call Create to create a thread in an application. If CreateSuspended is False, Execute is called immediately. If CreateSuspended is True, Execute won’t be called until after Resume is called.
;)
Das Raetsel bleibt also weiter offen, ich hab (auf den ersten Blick) keinen Code gesehn, der irgendwie gegen ein Ausfuehren sprechen wuerde :?

greetz
Mike

[Edit] Heut bin ich echt langsam, und dann noch dazu hat sich der rote Kasten freigenommen :(

www.Lars 11. Apr 2006 16:59

Re: #Thread starten
 
Hey wow!

Getestet und für gut befunden. That works...

Danke!

Lars :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.

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