![]() |
Re: thread
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:
Delphi-Quellcode:
MyThreadVar := TMyThread.Create(false);
|
Re: thread
unter anderen das runterladen von csv-dateien sowie das verarbeiten selbiger, das selber geht ja auch (bis auf meine anderen fragen :D) 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:
genommen, in den 3 sekunden sleep reagiert das programm allerdings trotzdem nicht
procedure TThreadSortForm.BubbleSortBoxPaint(Sender: TObject);
begin showmessage('test'); sleep(3000); showmessage('ausgeschlafen'); //PaintArray(BubbleSortBox, BubbleSortArray); end; 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 |
Re: thread
@ 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 .... |
Re: thread
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: thread
@ 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. |
Re: thread
Hallo,
für diese Routinen musst Du die Unit "SysUtils" einbinden. Gruß xaromz |
Re: thread
vielen dank, darauf muß man erstmal kommen
|
Re: thread
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:
was habe ich denn jetzt schon wieder falsch gemacht ?
// 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; |
Re: thread
Zitat:
Kann es jetzt aus dem Kopf nicht genau sagen, ich glaube, es war StrUtils. Die OH wird Dir da sicher weiterhelfen. Gruß onlinekater |
Re: thread
mm was anmelden ?
habe die selben units drinn (und mehr) wie im demoprogramm was hier gepostet wurde
Delphi-Quellcode:
zu StrUtils findet die OH leider nichts, und ansonsten weiß ich ja nicht wonach ich suchen muß
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, idURI, IdMultipartFormData, IdTCPClient, IdHTTP, StdCtrls, Grids, ComCtrls; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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