AGB  ·  Datenschutz  ·  Impressum  







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

thread

Ein Thema von Nisbo · begonnen am 1. Aug 2006 · letzter Beitrag vom 1. Aug 2006
Antwort Antwort
Seite 2 von 3     12 3      
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#11

Re: thread

  Alt 1. Aug 2006, 16:15
Wieso? Er hat erstens gesagt, was er machen möchte und er hat auch gesagt, dass das mit den Buttons nur ein Beispiel sein soll, damit er es versteht!

@Nisbo:

Füge eine neue Unit zu deinem Projekt hinzu. Da kopierste dann den Code von jfheins rein.

OnButton1Click:

MyThreadVar := TMyThread.Create(false);
Sascha
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#12

Re: thread

  Alt 1. Aug 2006, 16:16
unter anderen das runterladen von csv-dateien sowie das verarbeiten selbiger, das selber geht ja auch (bis auf meine anderen fragen ) nur ich möchte halt das mein programm dabei nicht einfriert

aus der delphidemo habe ich gesehen das mit den threads ja auch nur andere prozeduren aufgerufen werden nur ist mir dabei zuviel unwichtiges drinn, also allgemein zuviel, bin momentan immernoch dabei den code soweit zu kürzen das nur eine message kommt, das ist aber halt nicht wirklich einfach für einen noob in sachen threads

habe da auch schon mal experimentiert und

Delphi-Quellcode:
procedure TThreadSortForm.BubbleSortBoxPaint(Sender: TObject);
begin
showmessage('test');
sleep(3000);
showmessage('ausgeschlafen');
  //PaintArray(BubbleSortBox, BubbleSortArray);
end;
genommen, in den 3 sekunden sleep reagiert das programm allerdings trotzdem nicht

wie gesagt ob jetzt ne showmessage sinnvoll ist oder nicht sei mal dahingestellt, mir geht es in der hinsicht um das verstehen durch das ansehen von code

man könnte ja auch in der einen prozedur bei button 1 eine zahl solange um 1 erhöhen bis 1 Billion erreicht ist und das dann in einem tedit ausgeben, allerdings muß button 2 dann irghendwas anderes machen könen wie z.b. showmessage ausgeben ohne das das programm hängt
Jens
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#13

Re: thread

  Alt 1. Aug 2006, 16:20
@ Sascha L

ist doch auch wieder nur ein schnipsel und dazu dann noch über 2 units verteilt
wo einfügen ? das sind dann alles so fragen die mir durch den kopf gehen weswegen ich ja nach einem kompletten code frage

ich denke ich trinke erstmal nen bier, mir dampft der kopf ....
Jens
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#14

Re: thread

  Alt 1. Aug 2006, 16:25
Hallo,

ich habe Dir mal ein kommentiertes Testprojekt mit einem Button erstellt.
Schau Dir das mal an und stell dann konkrete Fragen.

Der Thread im Beispielprogramm lässt einfach eine Progressbar laufen, damit man ihn arbeiten sieht.

Anzumerken wäre noch, dass das nur ein Beispiel ist und man Thread keinesfalls in der hier gezeigten Weise verwenden sollte. Beispielsweise sollte man einen Thread nicht jedesmal neu erstellen, sondern lieber jedesmal aufwecken, wenn es etwas zu tun gibt.

Gruß
xaromz
Angehängte Dateien
Dateityp: zip threadtest_102.zip (1,3 KB, 24x aufgerufen)
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#15

Re: thread

  Alt 1. Aug 2006, 17:51
@ xaromz

vielen dank, jetzt komme ich langsam vorwärts, habe deinen code auch schon etwas verändert und erweitert sowie einen neuen thread erstellt, jetzt stellt sich aber die frage warum eine standardfunktion wie strtoint oder inttostr nicht funktioniert, bekomme da nur undefinierter bezeichner

so schaut dein kompletter umgebauter democode jetzt aus

Delphi-Quellcode:
unit Unit1;

interface

uses
  Forms, StdCtrls, Classes, Controls, ComCtrls;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button1: TButton;
    ProgressBar2: TProgressBar;
    Button2: TButton;
    Edit1: TEdit;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses
  Windows, Dialogs;

{$R *.dfm}

{ TMyThread }

// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
// Thread 1 START Thread 1 START Thread 1 START Thread 1 START
type
  Thread_Nr_01 = class(TThread)
    PB: TProgressBar;
    procedure Hauptprogramm;
    procedure Execute; override;
  end;

procedure Thread_Nr_01.Execute;
begin
  while not Terminated do begin
    Synchronize(Hauptprogramm); // Zugriff auf VCL-Elemente synchronisieren
    Sleep(10); // etwas warten VCLSync
  end;
end;

procedure Thread_Nr_01.Hauptprogramm;
var zahlenwert : integer;
begin
  // Fertig?
  if PB.Position < PB.Max then PB.StepIt // Progressbar weiter
  else Terminate; // Thread beenden
end;

// Button 1 Click
procedure TForm1.Button1Click(Sender: TObject);
var Th: Thread_Nr_01;
begin
  ProgressBar1.Position := 0; // ProgressBar 1 auf Null setzen
  Th := Thread_Nr_01.Create(True); // Thread erzeugen (suspended)
  Th.FreeOnTerminate := True; // Thread gibt sich selbst frei
  Th.PB := ProgressBar1; // Progressbar 1 zuweisen
  Th.Resume; // Thread starten
  ShowMessage('Thread für PB1'); // Message anzeigen, Thread läuft weiter
end;

// Button 2 Click
procedure TForm1.Button2Click(Sender: TObject);
var Th: Thread_Nr_01;
begin
  ProgressBar2.Position := 0; // ProgressBar 2 auf Null setzen
  Th := Thread_Nr_01.Create(True); // Thread erzeugen (suspended)
  Th.FreeOnTerminate := True; // Thread gibt sich selbst frei
  Th.PB := ProgressBar2; // Progressbar 2 zuweisen
  Th.Resume; // Thread starten
  ShowMessage('Thread für PB2'); // Message anzeigen, Thread läuft weiter
end;

// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
type
  Thread_Nr_02 = class(TThread)
    procedure Hauptprogramm;
    procedure Execute; override;
  end;

procedure Thread_Nr_02.Execute;
begin
  while not Terminated do begin
    Synchronize(Hauptprogramm); // Zugriff auf VCL-Elemente synchronisieren
    Sleep(10); // etwas warten VCLSync
  end;
end;

procedure Thread_Nr_02.Hauptprogramm;
var zahlenwert : integer;
begin
  zahlenwert := 0;
  zahlenwert := StrToInt(Form1.Edit1.Text);
  if zahlenwert < 10 then begin
    Form1.Edit1.Text := intotostr(zahlenwert + 1);
    //Form1.Edit1.Text := '1';
  end;

  Terminate; // Thread beenden
end;

// Button 3 Click
procedure TForm1.Button3Click(Sender: TObject);
var Th: Thread_Nr_02;
begin
  Th := Thread_Nr_02.Create(True); // Thread erzeugen (suspended)
  Th.FreeOnTerminate := True; // Thread gibt sich selbst frei
  Th.Resume; // Thread starten
end;

end.
Jens
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#16

Re: thread

  Alt 1. Aug 2006, 18:31
Hallo,

für diese Routinen musst Du die Unit "SysUtils" einbinden.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#17

Re: thread

  Alt 1. Aug 2006, 18:37
vielen dank, darauf muß man erstmal kommen
Jens
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#18

Re: thread

  Alt 1. Aug 2006, 19:27
ok habe das ganze jetzt in mein hauptprogramm eingebaut und der aufruf klappt auch, allerdings hängt das programm immer noch als ob es keinen thread geben würde

hier der teil vom programm incl dem threadbereich

Delphi-Quellcode:
// Thread 2 START Thread 2 START Thread 2 START Thread 2 START
type
  Thread_Nr_02 = class(TThread)
    procedure Hauptprogramm;
    procedure Execute; override;
  end;

procedure Thread_Nr_02.Execute;
begin
  while not Terminated do begin
    Synchronize(Hauptprogramm);
  end;
end;

procedure Thread_Nr_02.Hauptprogramm;
var
  data: TIdMultiPartFormDataStream;
  dieurl : string;
  A: TStrArray;
  AnzTokens, i, ccc, ccc2: Integer;
  csv: TStringList;
begin
  Screen.Cursor := crHourGlass;
  data := TIdMultiPartFormDataStream.Create;
  dieurl := Form1.Edit1.Text;
  try
    data.AddFormField('id', '1');
    Form1.Memo1.Text := Form1.IdHTTP1.Post(dieurl, data);
    Form1.Memo1.Lines.SaveToFile('shops.txt');
  finally
    data.Free;
  end;

  ccc := -1;
  if FileExists('shops.txt') then begin
    csv := TStringList.Create;
    csv.LoadFromFile('shops.txt');
    Form1.StringGrid1.Rowcount := csv.Count;

    for ccc2 := csv.Count - 1 downto 1 do begin
      AnzTokens := Explode(A, ';', csv.Strings[ccc2]);
      for i := 0 to AnzTokens -1 do begin
        ccc := ccc + 1;
        if ccc < 6 then begin Form1.StringGrid1.Cells[ccc, ccc2] := A[i]; end;
        if ccc = 6 then begin ccc := -1; end;
      end;
    end;
  end;
  Screen.Cursor := crDefault;
  Terminate;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Th: Thread_Nr_02;
begin
  Th := Thread_Nr_02.Create(True); // Thread erzeugen (suspended)
  Th.FreeOnTerminate := True; // Thread gibt sich selbst frei
  Th.Resume; // Thread starten
end;
was habe ich denn jetzt schon wieder falsch gemacht ?
Jens
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#19

Re: thread

  Alt 1. Aug 2006, 19:34
Zitat von Nisbo:
jetzt stellt sich aber die frage warum eine standardfunktion wie strtoint oder inttostr nicht funktioniert, bekomme da nur undefinierter bezeichner
na, weil Du wohl die entsprechende Unit nicht angemeldet hast.

Kann es jetzt aus dem Kopf nicht genau sagen, ich glaube, es war StrUtils. Die OH wird Dir da sicher weiterhelfen.

Gruß

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Nisbo

Registriert seit: 10. Mär 2005
191 Beiträge
 
Delphi 5 Standard
 
#20

Re: thread

  Alt 1. Aug 2006, 19:39
mm was anmelden ?

habe die selben units drinn (und mehr) wie im demoprogramm was hier gepostet wurde

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  IdBaseComponent, IdComponent, IdTCPConnection, idURI, IdMultipartFormData,
  IdTCPClient, IdHTTP,
  StdCtrls, Grids, ComCtrls;
zu StrUtils findet die OH leider nichts, und ansonsten weiß ich ja nicht wonach ich suchen muß
Jens
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05:42 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