AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads zur laufzeit erstellen

Ein Thema von DelTurbo · begonnen am 21. Dez 2009 · letzter Beitrag vom 23. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#1

Threads zur laufzeit erstellen

  Alt 21. Dez 2009, 18:52
Hi,

ich möchte gerne Threads zur laufzeit erstellen, leider komm ich nicht drauf wie das geht

Vielleicht denke ich auch falsch. Es muss doch pro Thread der typ erstellen werden, oder?

Delphi-Quellcode:
type
  TFlashThreadx = class(TThread)
    procedure Execute; override;
end;
und die Procedure muss ja dann TFlashThreadx.Execute heissen. Kann mir mal einer auf die sprünge helfen wie ich das zur laufzeit mache?

Vielen dank im voraus
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Threads zur laufzeit erstellen

  Alt 21. Dez 2009, 19:24
Hast du dir schon die Tutorials auf http://www.delphi-treff.de/ angesehen?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Threads zur laufzeit erstellen

  Alt 22. Dez 2009, 13:30
Hi,

nein, noch nicht. Ich hatte gegooglt und nix gefunden. Ich dachte es geht so einfach wie ein object zu laufzeit zu erstellen.

OFFTOPIC: Wieso bekomme ich keine email-benachrichtugen wenn in "meinen" sachen was geschrieben wird? Der hacken ist im feld.

Gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.119 Beiträge
 
Delphi 12 Athens
 
#4

Re: Threads zur laufzeit erstellen

  Alt 22. Dez 2009, 13:45
Zitat von DelTurbo:
OFFTOPIC: Wieso bekomme ich keine email-benachrichtugen wenn in "meinen" sachen was geschrieben wird? Der hacken ist im feld.
Schon in den Spammails nachgeschaut?
Ist im DP-Profil aktiviert, daß du eMails erhalten möchtest?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Threads zur laufzeit erstellen

  Alt 22. Dez 2009, 14:42
Hmmm,

ich glaube eigentlich dürfte ich garnicht frei rumlaufen
War ein anderes mail-konto eingetragen als das was ich abfrage..... Dort lagen die mails.

Danke für den hinweiss.

Zurück zum topic. http://www.delphi-treff.de/tutorials...hreads/page/5/ hier ist es sehr gut beschrieben. Aber leider als konsolenanwendung. Ich werd mich da mal durchfummeln. Wenn ich nicht weiterkomme werde ich einfach nochmal fragen.

Gruss
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#6

Re: Threads zur laufzeit erstellen

  Alt 22. Dez 2009, 15:20
Scheint wunderbar zu klappen.

Vielen Dank.....
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Threads zur laufzeit erstellen

  Alt 22. Dez 2009, 20:58
Hi,

vielleicht könnt ihr mal drübersehen. Das ist nur ein kleiner test. Ich weiss das ich den status nicht beachte und man z.b. 2x Start klicken könnte. Es geht mir nur darum ob das soweit ok ist.

Eventuell kann es ja auch als vorlage für andere user dienen.

Gruss und danke im voraus

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type
   TMyThread = record
     ThreadID: DWORD;
     ThreadHandle: THandle;
         OutPut   :TLabel;
   MyID      :Integer;
end;
var
    MyThread   :Array[0..10] of TMyThread;
    olabel :Array[0..2] of TLabel; // = (Form1.Label1,Form1.Label2,Form1.Label3);
{******************************************************************************
  Flashing(varptr: Pointer): LongInt; stdcall - 12/22/2009 4:13
******************************************************************************}

function Flashing(varptr: Pointer): LongInt; stdcall;
var
  i,n         :Integer;
begin
  n:=integer(varptr^);
  for i:=0 to 70 do begin
    MyThread[n].OutPut.Caption:='Ich bin T#'+IntToStr(n)+' '+IntToStr(i);
    sleep(700+(n*200));
  end;
  Result:=0;
end; {Flashing(zahl: Pointer): LongInt; stdcall}

procedure TForm1.Button1Click(Sender: TObject);
var
  i :Integer;
begin

  olabel[0]:=Label1;
  olabel[1]:=Label2;
  olabel[2]:=Label3;
  for i:=0 to 2 do begin
      MyThread[i].MyID:=i;
      MyThread[i].OutPut:=oLabel[i];
      MyThread[i].ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@Flashing),@MyThread[i].MyID, 0, MyThread[i].ThreadID);
      if MyThread[i].ThreadHandle<>0 then CloseHandle(MyThread[i].ThreadHandle);
  end;
end;


end.
EDIT: Was öfters passiert ist, das er die ausgaben links oben auf dem monitor macht. Vielleicht hat einer ne idee wieso er das macht. Das ist ein Snapshoot von oben links.

http://fli4l.hosting-4-u.de/error.gif
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#8

Re: Threads zur laufzeit erstellen

  Alt 22. Dez 2009, 21:50
Du darfst aus dem Thread nicht auf Komponenten (wie z.B. dein Label) zugreifen, weil diese im Haupt-Thread erstellt wurden. Benutze TThread (siehe Methode Synchronize()) oder, wenn du deinen Thread so starten möchtest, PostMessage(), um mit dem Haupt-Thread zu kommunizieren, damit dieser den Text auf dem Label ändern kann.
Da findet man glaube ich auch mit den passenden Begriffen wie TThread und Synchronize recht viel, vermute ich... oder z.B. mit PostMessage und Thread Synchronisation.

HTH
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#9

Re: Threads zur laufzeit erstellen

  Alt 23. Dez 2009, 12:35
Hi,

erstmal danke für die hilfe. Ich habe nun gegooglt und mir alles soweit zusammen gesucht. Hier nochmal mein kram. Es läuft meines erachtens einwandfrei. Wär trotzdem nett wenn ihr nochmal drüberschaut.

Danke

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls;
const
  PM_App = WM_APP + 1;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
   procedure PMApp(var Msg: TMessage); message PM_App;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
   TMyThread = record
     ThreadID: DWORD;
     ThreadHandle: THandle;
         OutPut   :TLabel;
   MyID      :Integer;
         Count :Integer;
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
    MyThread   :Array[0..10] of TMyThread;
    olabel :Array[0..2] of TLabel; // = (Form1.Label1,Form1.Label2,Form1.Label3);
{******************************************************************************
  TForm1.PMApp(var Msg: TMessage) - 12/23/2009 12:25
  By: DiKo
******************************************************************************}

procedure TForm1.PMApp(var Msg: TMessage);
var
  i :Integer;
begin
  i := Integer(Msg.lParam);
  MyThread[i].OutPut.Caption:='Ich bin T#'+IntToStr(MyThread[i].MyID)+' '+IntToStr(MyThread[i].Count);
end; {TForm1.PMApp(var Msg: TMessage)}
{******************************************************************************
  Flashing(zahl: Pointer): LongInt; stdcall - 12/22/2009 4:13
******************************************************************************}

function Flashing(varptr: Pointer): LongInt; stdcall;
var
  i,n         :Integer;
begin
  n:=integer(varptr^);
  for i:=0 to 70 do begin
    MyThread[n].Count:=i;
    PostMessage(Form1.Handle, PM_App, 0, MyThread[n].MyID);
    sleep(700+(n*200));
  end;
  Result:=0;
end; {Flashing(zahl: Pointer): LongInt; stdcall}

procedure TForm1.Button1Click(Sender: TObject);
var
  i :Integer;
begin
  olabel[0]:=Label1;
  olabel[1]:=Label2;
  olabel[2]:=Label3;
  for i:=0 to 2 do begin
      MyThread[i].MyID:=i;
      MyThread[i].OutPut:=oLabel[i];
      MyThread[i].ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@Flashing),@MyThread[i].MyID, 0, MyThread[i].ThreadID);
  if MyThread[i].ThreadHandle<>0 then CloseHandle(MyThread[i].ThreadHandle);
  end;
end;


end.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#10

Re: Threads zur laufzeit erstellen

  Alt 23. Dez 2009, 13:59
Hi!

PostMessage(Form1.Handle, PM_App, 0, MyThread[n].MyID); Ich glaube das ist nicht gut. Übergebe den Wert von Form1.Handle lieber deinem Flashing() als Argument mit.
Quasi irgendwie so:

Delphi-Quellcode:
for i:=0 to 2 do
begin
  MyThread[i].MyID := i;
  MyThread[i].WindowHandle := Handle; // rubbel die katz
  MyThread[i].OutPut := oLabel[i];
  MyThread[i].ThreadHandle := CreateThread(nil, 0, TFNThreadStartRoutine(@Flashing),@MyThread, 0, MyThread[i].ThreadID);
  if MyThread[i].ThreadHandle <> 0 then
    CloseHandle(MyThread[i].ThreadHandle);
end;
und passe die Flashing-Funktion dementsprechend an.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz