Créer une fenêtre de LOG ? [DELPHI] - Delphi/Pascal - Programmation
Marsh Posté le 17-08-2011 à 08:54:47
dans le thread, faut mettre une instruction relative au thread qui "ralentit" ce dernier le temps de permettre au cpu de faire traiter un bout des autres processus en cours. Mais je ne me rappelle plus la commande. Je crois qu'elle finit par "process"...
Marsh Posté le 17-08-2011 à 09:56:39
oui, c'est ça
Marsh Posté le 17-08-2011 à 10:34:03
ok, mais concrétement je le mets où le application.processmessages ? dans le execute ?
Marsh Posté le 17-08-2011 à 11:22:39
dans le thread qui consomme tout le CPU, c'est-à-dire WTVtoTS.
Je vois que tu lances dans ce thread une ligne de commande. Regardes si y'a pas des options à ce sujet...
Marsh Posté le 25-08-2011 à 10:45:31
Une méthode simple
Utiliser Gexpert pour Delphi (addon très pratique et gratuit)
Utiliser l'unité DbugIntf, elle gère une fenêtre complètement indépendante de log
Utiliser la procédure SendDebug.
L'unité contient d'autres procédures pour logger
Marsh Posté le 17-08-2011 à 08:09:15
Bonjour,
j'ai un soft qui affiche une fenêtre de LOG pdt un long traitement (c'est juste une fiche dans laquelle se trouve un memo, j'ajoute une ligne au memo contenant la commande passée, puis j'éxécute la commande).
Le problème c'est que cette commande est longue à traiter (5 à 15 minutes).
Pdt ce temps, le memo de la fenêtre n'est pas accessible (je ne peux pas copie rle texte par exemple avec un clic droit).
J'ai donc regardé du côté des threads, mais franchement je n'y comprends rien.
Quelqu'un peut-il m'expliquer exactement comment faire ?
Peut-être puis-je me passer des threads ?
En tout cas voilà ce que j'ai fait !
unit UnitThreadLOG;
interface
uses
Classes,sysutils,unitlog;
type
LOG_Thread = class(TThread)
private
{ Déclarations privées }
FFormLOG:TFormLOG;
protected
procedure Execute; override;
procedure OnTerminateProcedure(Sender: TObject);
public
constructor Create(Suspended : Boolean;s:string);
end;
implementation
constructor LOG_THREAD.Create(Suspended: Boolean;s:string);
begin
FreeOnTerminate := True;
inherited Create(Suspended);
Formlog := TFormLog.Create(nil);
FormLOG.Show;
formlog.memo1.Lines.Add(s);
OnTerminate := OnTerminateProcedure;
end;
{ LOG_Thread }
procedure LOG_THREAD.OnTerminateProcedure(Sender: TObject);
begin
//if Assigned(FORMLOG) then
//FormLOG.Release;
end;
procedure LOG_Thread.Execute;
begin
{ Placez le code du thread ici }
// if Assigned(FormLOG) then
end;
end.
et dans mon prog :
Procedure TFormProgress.WTVtoTS(nfs, repdest, nomfic: string);
var commande, s1: string;
sizewtv, sizeTS: Int64;
doscommand1: tdoscommand;
i, longext: integer;
f: textfile;
var
MyThread_2 : LOG_THREAD;
begin
commande := '"' + javapath + '" -cp "' + cheminappli +
'logiciels\remuxtool_1.2.4\remuxtool.jar" util.WtvToMpeg -i "' + nfs +
'" -o "' + repdest + nomfic + '.ts" -all';
MyThread_2:=LOG_THREAD.Create(false,commande);
.....
Je vois bien la fenêtre apparaître, mais pas le texte !!!!
Merci pour votre aide.