Autor Beitrag
Andre :-)
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Sa 08.02.03 00:48 
Hi,

unter Java kein Prob, nur wie kann ich hier ein Thread aufmachen
und dann auch nutzen?

Danke
Andre

_________________
Security is just a feeling, but never reality
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: Sa 08.02.03 16:14 
Hi André. Du musst für jeden Thread, der eine andere Aufgabe erledigen soll, eine eigene Klasse erstellen...

Eine Beispiel Unit sähe dann so aus (noch nicht gespeichert - einfach mit dem Quelltext der neuen Anwendungs-Unit ersetzen). Sie wartet nach dem Start (der Anwendung [!!!], da im OnCreate der Form der Thread erstellt wird) 3 Sekunden lang und gibt dann die Nachricht aus. Wenn man bestätigt, ist die Execute-Prozedur des Threads beendet und der Thread terminiert...

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TWorkThread = class(TThread)
    public
      procedure Execute; override;
end;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  WT:TWorkThread;
implementation

procedure TWorkThread.Execute;
var lTick:LONGINT;
begin
  //der Thread-Code hier - in diesem Beispiel wartet der Thread 3 Sekunden lang und gibt dann eine Nachricht aus
  lTick:=GetTickCount;
  repeat
    Application.ProcessMessages
  until (GetTickCount-lTick > 3000) OR Terminated;
  ShowMessage('3 Sekunden sind um!');
end;


{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  WT:=TWorkThread.Create(False); //False -> gleich mit der Abarbeitung loslegen

end;

end.

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: Sa 08.02.03 18:32 
Wenn du für deinen Thread keine Klasse definieren (oder ohne VCL arbeiten, denn wir sind ja in der nonVCL-Sparte) willst, kannst du stattdessen auch die API-Funktion CreateThread verwenden.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 08.02.03 18:36 
Damit komme ich übrigens besser klar als das mit der VCL.
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 08.02.03 18:54 
OregonGhost hat folgendes geschrieben:
oder ohne VCL arbeiten, denn wir sind ja in der nonVCL-Sparte

Und was hat nonRTLx mit nonVCL zu tun? Die Classes-Unit gehört nicht zur VCL sondern zur erweiterten RTL, wie auch die SysUtils Unit.
Das nur mal um die Begriffe klar zu definieren.

_________________
Ist Zeit wirklich Geld?
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: Sa 08.02.03 19:03 
Danke AndyB: das meine ich nämlich auch: Klasse ist nicht gleich VCL. Schließlich heißt es ja "VISUAL" Component Library - und ich weiß beim besten nicht, wo die TThread-Klasse visuell ist :/

Ach übrigens kapselt die TThread-Klasse auch nur die WinAPI.

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
Andre :-) Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Sa 08.02.03 22:38 
Hi,

vielen Dank für die Antworten, aber könntet Ihr mir vielleicht anhand eines Bsp. einen Thread erklären, den ich innerhalb meiner bestehenden Form nutzen kann.

Irgendwie dass ich zum Bsp. für einen Donwload einen eigenen Thread aufmachen kann. Sodass ich den Thread auch wieder killen kann?

Hintergrund ist ein FTP Tool, welches ich leider mit der NMFTP Komponente geschrieben habe. ( Ich komme mit der INDI nicht aufm Server ?!?!? ) Und ich nun das Problem mit dem Abort lösen muss, welches ja anscheinend echte Probleme bei der o.g. Komponente macht.

Also, könntet Ihr mir kurz erleutern, wie ich einen neuen THREAD innerhalb ein Procedure starte?

DANKE DANKE DANKE

_________________
Security is just a feeling, but never reality
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 08.02.03 22:46 
Na ja ein Beispiel wäre SortIt oder der Internet-Monitor von meiner HP, allerdings wäre das ohne die Thread-Klasse, also reine WinAPI.