var X : extended; begin DecimalSeparator := '.'; X := StrToFloat(Label1.Caption);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionif pos(#13,Label1.Caption) then X := StrToFloatDef(Label1.Caption,0);
Non, un thread !
Les timers sont à proscrire .
ils consomment des ressources
et ne sont mêmes pas garantis d'être exécutés si le système est un tant soit peu occupéAh bon tu as vu souvent des évènements OnTimer non executés ? Tu as des exemples concrets à nous citer ?
Un thread n'est pas un timer, mais s'il peut être utilisé en tant que tel.
Ben pourquoi un thread ca n'en consomme pas ?
Ah bon tu as vu souvent des évènements OnTimer non executés ? Tu as des exemples concrets à nous citer ?
De plus les cas ou un timer n'est pas exécutés sont très très très très rares et quand cela a lieu c'est bien souvent lié à un mauvais codage.
Qu'un timer soit imprécis - oui , qu'un timer ne permet pas de réaliser plusieurs taches à la fois - oui, mais faut pas dire de bétises : Un timer est utilisable et préférable dans 99% des cas à un thread
et si un thread est mal utilisé c'est la catastrophe.
Oh là là là toutes les conneries que tu viens de dire
Je parlais du composant TTimer en lui-même, qui n'est qu'un substitut au thread pour les paresseuxun thread et un timer ont un mode de fonctionnement qui n'ont rien avoir et parlons mêmes pas du reste. Je t'invite à lire le tuto de GrandVizir
J'ai fait l'expérience de surcharger mon processeur (charge à 50% environ, sur les deux coeurs)
Heu charger ton CPU à 50% faut le faire quand même : ca t'arrive souvent ?
Et comment tu fais quand tu as besoin de beaucoup de timers (Par exemple 5) ? Tu utiles 5 threads ?
Bacterius je dis pas que tu as totalement tord, mais tu es tellement extrême dans ton affirmation qu'elle en devient fausse
les gars vous comparez deux chose totalement différentes ... donc incomparables !!!!C'est bien ce que je me tue à dire à Bacterius.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TBlinkThread = class(TThread) private fLabel : TLabel; procedure Clignoter; protected Constructor Create(ALabel: TLabel); procedure Execute; override; procedure Stop; end; TForm1 = class(TForm) lblClignotant: TLabel; btnGo: TButton; btnStop: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure btnGoClick(Sender: TObject); procedure btnStopClick(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var MonThread : TBlinkThread; Constructor TBlinkThread.Create(ALabel: TLabel); begin fLabel := ALabel; inherited Create(True); end; procedure TBlinkThread.Clignoter; begin fLabel.Visible := not fLabel.Visible; end; procedure TBlinkThread.Stop; begin Suspend; fLabel.Hide; end; procedure TBlinkThread.Execute; begin repeat Sleep(500); // => 1 affichage/seconde Synchronize(Clignoter); until Terminated; end; procedure TForm1.FormCreate(Sender: TObject); begin MonThread := TBlinkThread.Create(lblClignotant); end; procedure TForm1.FormDestroy(Sender: TObject); begin MonThread.Free; end; procedure TForm1.btnGoClick(Sender: TObject); begin MonThread.Resume; end; procedure TForm1.btnStopClick(Sender: TObject); begin MonThread.Stop; end; END.
procedure TForm1.DdeClientItemChange(Sender: TObject); var X : Extended; begin label1.Caption:= DdeClientItem.Text; Button1.caption:= DdeClientItem.Text; X := StrToFloat(DdeClientItem.Text); label2.Caption:=FloatTostr(X); end;