AGB  ·  Datenschutz  ·  Impressum  







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

Threads

Ein Thema von glkgereon · begonnen am 15. Nov 2004 · letzter Beitrag vom 18. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Threads

  Alt 15. Nov 2004, 19:18
is das die richtige kategorie?

naja, egal:
also, meine frage, mkann mal einer ein baispiel zu threads posten?
ich hab jetzt auf auch das tutorial von luckie, aber auch das hilft mir nicht so wirklich weiter (sorry)

ich bräuchte einfach mal eine kleine anwendung so in der art:

in der hauptanwendung ein label, im thread wir einfach nur eine variable hochgezählt und der hauptthread gibt vor wie groß das delay dazwischen ist

(=> Werteübergabe App->thread und Thread->App)
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Threads

  Alt 15. Nov 2004, 20:12
Also die Demos im Zip Archiv sind schon so einfach wie möglich und dürften gemnau dem entsprechen, was du suchst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: Threads

  Alt 15. Nov 2004, 22:53
achso....im archiv sind dem demos dabei???

ich hab mid nur das pdf runtergeladen...

ich werds mir anschauen, aber nicht mehr heute
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: Threads

  Alt 15. Nov 2004, 23:09
Zitat von glkgereon:
in der hauptanwendung ein label, im thread wir einfach nur eine variable hochgezählt und der hauptthread gibt vor wie groß das delay dazwischen ist
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TMyThread = class(TThread)
  private
    FLabel: TLabel;
    FCounter: Integer;
    FDelay: Integer;
    procedure UpdateVCL;
  protected
    procedure Execute; override;
  public
    constructor Create(ALabel: TLabel);
    property Delay: Integer read FDelay write FDelay;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

constructor TMyThread.Create(ALabel: TLabel);
begin
  inherited Create(True);
  FCounter := 0;
  FLabel := ALabel;
end;

procedure TMyThread.Execute;
begin
  while (not Self.Terminated) do
  begin
    Inc(FCounter);
    Synchronize(UpdateVCL);
    Sleep(FDelay);
  end;
end;

procedure TMyThread.UpdateVCL;
begin
  FLabel.Caption := IntToStr(FCounter);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TMyThread.Create(Label1) do
  begin
    Delay := 1000;
    Resume;
  end;
end;

end.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: Threads

  Alt 16. Nov 2004, 15:08
hmm....sorry luckie...aber die demos sind irgendwie zu kompliziert um da auf anhieb mit einzusteigen

ich werd jetzt nochma die kürzeren demos genau durchgehen...

doch jetzt habbichs

//erldigt wie kann ich mit syncronize eine methode ausgabe aufrufen der ich was übergeben will?
und noch einen:

hier kommt was falsches raus...kann das an der übergabe liegen?

Delphi-Quellcode:
procedure TPiCalc.Ausgabe;
begin
  Form1.Pi_Ausgabe.Value:=Value;
end;

procedure TPiCalc.Execute;
var x, y:Extended;
    PointsIn, PointsAll:Int64;
begin
  randomize;
  while not Terminated do
    begin
    x:=random;
    y:=random;
    if sqr(x)+sqr(y)<1 then inc(PointsIn);
    inc(PointsAll);
    Value:=4*PointsIn/PointsAll;
    Synchronize(Ausgabe);
    end;
end;
eigentlich sollte da 3.14.... rauskommen, es kommt aber 0.068... raus
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Threads

  Alt 17. Nov 2004, 16:17
*push*

weiss das echt keiner?

kann mir denn wenigstens einer sagen ob dei übergabe oder die berechnung falsch is? (ober beides)

ich bin nämlich echt am verzweifeln....


EDIT: hab den fehler...

WARUM ZUM TEUFEL WERDEN INT64 IN DEM THREAD NICHT AUF 0 INITIALISIERT ?????????


mann echt jetzt, das klann doch net sein, in normalen apps tun die das doch, oder?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Threads

  Alt 17. Nov 2004, 16:32
Delphi-Quellcode:
procedure TPiCalc.Execute;
var x, y:Extended;
    PointsIn, PointsAll:Int64;
begin
  randomize;
  PointsIn := 0; // <==== !!!!!!!!!!!!!
  PointsAll:= 0; // <==== !!!!!!!!!!!!!
  while not Terminated do
    begin
    x:=random;
    y:=random;
    if sqr(x)+sqr(y)<1.0 then inc(PointsIn);
    inc(PointsAll);

    // wenn nach jeder Berechnung sofort eine Ausgabe erfolgen würde
    // braucht man keine Threads !!
    if (PointsAll mod 1000) = 0 then
    begin
       Value:=4.0*PointsIn/PointsAll;
       Synchronize(Ausgabe);
    end;
  end;
  Value:=4.0*PointsIn/PointsAll;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#8

Re: Threads

  Alt 17. Nov 2004, 16:35
also
a) Warum initialisisern die sich nicht automatisch wie sonst auch???
b) es war nur ne übung, keine "sinnvolle" anwendung
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Threads

  Alt 17. Nov 2004, 16:39
Zitat von glkgereon:
a) Warum initialisisern die sich nicht automatisch wie sonst auch???
Weil es lokale Variablen sind. Nur Strings und Klassen(member-)variablen werden vorbelegt.
Zitat von glkgereon:
b) es war nur ne übung, keine "sinnvolle" anwendung
Mit meiner Änderung wird ne "sinnvolle" Übung draus.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Threads

  Alt 17. Nov 2004, 16:40
Hoi

Lokale Variablen machen das doch nie, nur globale und Felder.

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  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 16:15 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