Re: Realtime Input? Thread?
You have to add a Thread-Objekt to your programm and fill it with code
edit: or view my test programm |
Re: Realtime Input? Thread?
Zitat:
Zitat:
@sk.Silvia: The TThread class must not be used like this. It has to be derived and the derived class has to be instantiated (and obviously implemented). |
Re: Realtime Input? Thread?
but how? :oops:
Delphi-Quellcode:
but thats not correct:(
type TFiber=class(TTHread)
procedure execute; override; end; procedure TFiber.execute; var i:integer; begin repeat ShowMessage(IntToStr(i)); Suspend; i:=i+1; until i=3; end; var Fiber:TFiber; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin Fiber:=TFiber.Create(false); Fiber.execute; end; procedure TForm1.Button2Click(Sender: TObject); begin Fiber.Resume; end; |
Re: Realtime Input? Thread?
I still don't know why you want to do this with a thread, if you mind looking at my post above.
But if, this is how to do it: - place the query (or whatever fetches the input form the user) in a thread - after the query was answered and confirmed by the user, the thread sets a variable "I'm done", places the user input somewhere the main thread has access to and goes asleep/terminates - in your main thread, you use waitforsingleobject to wait until the thread does set this variable, fetch the input and continue your loop. But unless you have to keep your app doing something else while waiting for the input (which wouldn't work the way I just described it), i don't know why you would want to use a thread here... EDIT: you don't initialize your "i" in the thread, so it'll probably take a long time until it gets to "3". but I can't see any othermistakes in it. |
Re: Realtime Input? Thread?
cause i dont want that other forms are opened, i want just to stop the process, work with some other procedures and then by cliking resume work with the stoped procedure again
but this codes dont stopes on Suspend, but counts directly up to 3
Delphi-Quellcode:
type TFiber=class(TTHread)
Memo:TMemo; procedure execute; override; procedure doit; constructor Create(iMemo:TMemo); end; constructor TFiber.Create(iMemo:TMemo); begin inherited Create(false); Memo:=iMemo; end; procedure TFiber.execute; var i:integer; begin Synchronize(Doit); doit; end; procedure TFiber.doit; var i:integer; begin i:=0; repeat Memo.Lines.Append(IntToStr(i)); Suspend; i:=i+1; until i=3; end; var Fiber:TFiber; procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin Fiber:=TFiber.Create(Memo1); Fiber.execute; end; procedure TForm1.Button2Click(Sender: TObject); begin Fiber.Resume; end; |
Re: Realtime Input? Thread?
IMHO you have to use suspend in the main thread
|
Re: Realtime Input? Thread?
ah... think i got you.
You have to place the thing you want to be able to suspend in the second thread. well, your first example does work fine with me:
Delphi-Quellcode:
@C.Schoch: Yes, if you want to stop the thread like when the user says so or similarly.
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) {...} end; TFiber=class(TTHread) procedure execute; override; end; var Form2: TForm2; Fiber: TFiber; implementation procedure TFiber.execute; var i:integer; begin i := 0; repeat ShowMessage(IntToStr(i)); Suspend; i:=i+1; until i=3; end; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin Fiber.Resume; end; procedure TForm2.FormShow(Sender: TObject); begin Fiber := TFiber.Create(false); end; end. |
Re: Realtime Input? Thread?
but by me the Suspend; dont stop the threat, it do nothing(likle i could exclude Suspend from the code and it would be the same) :(
but i need to suspend the threat in the repeat, so i cannot suspend it in Form1
Delphi-Quellcode:
procedure TFiber.execute;
var i:integer; begin i:=0; repeat Memo.Lines.Append(IntToStr(i)); Suspend; //<------------HERE i:=i+1; until i=3; end; |
Re: Realtime Input? Thread?
Liste der Anhänge anzeigen (Anzahl: 1)
it DOES with me...
I attached some primitive prime test, which stops itself after every found prime. |
Re: Realtime Input? Thread?
maybe try :
Delphi-Quellcode:
i have no Delphi here to test this now
procedure TFiber.execute;
var i:integer; begin i:=0; repeat Memo.Lines.Append(IntToStr(i)); wait(1) // <--- Here i changed Suspend; //<------------HERE i:=i+1; until i=3; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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