Thread - début puis sortie immédiate [Résolu]

syphon22 11 Messages postés jeudi 17 août 2006Date d'inscription 8 février 2010 Dernière intervention - 21 janv. 2010 à 09:47 - Dernière réponse : syphon22 11 Messages postés jeudi 17 août 2006Date d'inscription 8 février 2010 Dernière intervention
- 8 févr. 2010 à 21:33
Bonjour à tous,

je vous explique mon problème :

Quand je lance mon thread depuis mon application principale avec un bouton, des fois, il entre puis sort immédiatement du thread...

Dans le journal d'événements, j'ai :
Début du Thread : ID du thread : 3276. Processus asfasdf.exe...
Sortie du Thread : ID du thread : 3276. Processus asfasdf.exe...
Début du Thread : ID du thread : 3496. Processus asfasdf.exe...
Sortie du Thread : ID du thread : 3496. Processus asfasdf.exe...
Début du Thread : ID du thread : 1976. Processus asfasdf.exe...
...

Je dois cliquer plusieurs fois sur le bouton et au bout d'un moment, le thread se lance... Comment faire pour remédier à ce problème ?

D'avance merci pour vos réponses, bonne journée.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Utilisateur anonyme - 8 févr. 2010 à 15:19
3
Merci
Je t'ai fais un exemple Tapez le texte de l'url ici.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
syphon22 11 Messages postés jeudi 17 août 2006Date d'inscription 8 février 2010 Dernière intervention - 21 janv. 2010 à 15:56
0
Merci
up
Commenter la réponse de syphon22
Utilisateur anonyme - 22 janv. 2010 à 08:10
0
Merci
Down .

Syphon : Pas la peine de relancer ton topic , il a été vu . Si tu n'as eu aucune réponse c'est que

1)Ta question n'est pas claire.
2)Tu ne donnes aucun code : Sans, on ne peut pas te dire d'ou vient le problème
3)Cirec t'a déjà renvoyé vers un source qui fonctionne parfaitement : A toi de savoir l'exploiter.
Commenter la réponse de Utilisateur anonyme
syphon22 11 Messages postés jeudi 17 août 2006Date d'inscription 8 février 2010 Dernière intervention - 8 févr. 2010 à 11:39
0
Merci
Bonjour,

L'aide de Cirec m'a été d'une précieuse utilité. Mais j'ai néanmoins toujours ce problème.

Je dois cliquer plusieurs fois sur mon bouton pou pouvoir exécuter le thread.

Voici un bout de code :
dans mon Main :

[b]procedure TfmMain.button1(Sender: TObject);
threadSeg : ThreadSeg;
begin

threadSeg := threadSeg.Create(true);
threadSeg.Resume;
end;/b

dans le thread :
[b]constructor threadSeg.Create(CreateSuspended:boolean);
begin
inherited Create(CreateSuspended);
Priority:=tpNormal;
FreeOnTerminate := true;
end;

destructor threadSeg.Destroy;
begin
//déchargez la mémoire ici si vous avez créé des objets
inherited;
end;


procedure threadSeg.Execute;
begin
{code}
end;/b

En espérant avoir été claire cette fois ci, je vous remercie pour vos messages

Salutations
Commenter la réponse de syphon22
Utilisateur anonyme - 8 févr. 2010 à 12:51
0
Merci
Salut

code non testé et pompé goulument sur le tuto de GrandVizir

unit ThreadSegUnit;


interface
uses Windows, Classes, SysUtils;

type
  TThreadSeg = class(TThread)
  private
    procedure CentralControl;
  public
    constructor Create(CreateSuspended:boolean);
     destructor Destroy; override;
  protected
    procedure Execute; override;
  end;

implementation

constructor TThreadSeg.Create(CreateSuspended:boolean);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate:=false;
  Priority:=tpNormal;
end;

destructor TThreadSeg.Destroy;
begin
  //déchargez la mémoire ici si vous avez créé des objets
  inherited;
end;

procedure TThreadSeg.CentralControl;
begin
  //écrivez ici ce que doit faire votre thread à un instant T donné
end;

procedure TThreadSeg.Execute;
begin
  repeat
    Sleep(500); //en millisecondes
    Synchronize(CentralControl);
  until Terminated;
end;
end.


A utiliser ainsi

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ThreadSegUnit;

type
  TForm1 = class(TForm)
    ButtonThread: TButton;
    procedure ButtonThreadClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    ThreadSeg:TThreadSeg;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonThreadClick(Sender: TObject);
begin
  If Assigned(ThreadSeg) Then
    Begin
  ThreadSeg.Suspend;
  ThreadSeg.Free;
End;
  ThreadSeg:=TThreadSeg.Create(true);
  ThreadSeg.Resume;
end;


Dans ton code, tu avais oublié de suspendre et supprimer ton thread. Ton problème venait surement de là.
Commenter la réponse de Utilisateur anonyme
syphon22 11 Messages postés jeudi 17 août 2006Date d'inscription 8 février 2010 Dernière intervention - 8 févr. 2010 à 13:16
0
Merci
Merci pour ton aide.

ça ne marche toujours pas, au premier clic sur le bouton il y début du thread puis immédiatement sortie du thread comme avant et au 2ème clic sur le bouton, il y une exception avec message "Erreur de thread : Descripteur non valide (6)"

Je ne comprends pas, pourtant j'ai exactement suivi le code ci-dessus...
Commenter la réponse de syphon22
syphon22 11 Messages postés jeudi 17 août 2006Date d'inscription 8 février 2010 Dernière intervention - 8 févr. 2010 à 14:53
0
Merci
Il doit y avoir un problème lors du clic sur le bouton. Car le thread ne se lance même pas...

Journal d'événements :
Début du Thread : ID du thread : 3276. Processus asfasdf.exe...
Sortie du Thread : ID du thread : 3276. Processus asfasdf.exe...
Début du Thread : ID du thread : 3496. Processus asfasdf.exe...
Sortie du Thread : ID du thread : 3496. Processus asfasdf.exe...
Début du Thread : ID du thread : 1976. Processus asfasdf.exe...

au bout du 3ème coup, le thread s'exécute.
Quelqu'un sait pourquoi il ne s'exécute pas tout de suite ?
Commenter la réponse de syphon22
Utilisateur anonyme - 8 févr. 2010 à 15:16
0
Merci
Re,

Je viens de tester : le code que je t'ai passé fonctionne parfaitement (Aucune erreur malgré plusieurs click de réalisé).

Donc deux solutions : soit tu as modifié un truc dans le code que je t'ai passé, soit le problème vient d'ailleurs.
Commenter la réponse de Utilisateur anonyme
syphon22 11 Messages postés jeudi 17 août 2006Date d'inscription 8 février 2010 Dernière intervention - 8 févr. 2010 à 21:33
0
Merci
Merci pour cet exemple,

je vais chercher ailleurs alors ;)

Salutations, bonne soirée et merci encore.
Commenter la réponse de syphon22

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.