IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Problème de violation d'accès (access violation) avec le TTimer de lazarus


Sujet :

Lazarus Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Problème de violation d'accès (access violation) avec le TTimer de lazarus
    Bonjour à tous et toutes,

    Voilà, je me retrouve avec une "access violation" quand je tente d'utiliser un TTimer.
    J'ai vu sur la toile qu'il y avait un bug concernant le TTimer pour la version 2.2.0 de FPC mais que ce bug aurait été corrigé dans la version 2.2.2...

    Qu'en est-il ?

    En attendant je me retrouve coincé car j'ai besoin d'un timer dans un de mes projets et pour l'instant, le projet est mort

    Voilà un exemple du code qui conduit à cet "access violation" chez moi:

    Le TestTimer.lpr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    program TestTimer;
     
    {$mode objfpc}{$H+}
     
    uses
      Classes, Timer;
     
    var
      PU_Classe: TMyClass;
     
    begin
      PU_Classe := TMyClass.Create;
     
      repeat
        // Ne fait rien
      until PU_Classe.Count = 5;
     
      PU_Classe.Free;
    end.
    Le Timer.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    unit Timer;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, ExtCtrls;
     
    type
      TMyClass = class
      private
        PR_Count: Byte;
        PR_Timer: TTimer;
     
        procedure MyOnTimer(Sender: TObject);
      public
        constructor Create;
        destructor Destroy; override;
     
        property Count: Byte read PR_Count;
      end;
     
    implementation
     
    procedure TMyClass.MyOnTimer(Sender: TObject);
    begin
      Inc(PR_Count);
      Write(PR_Count);
    end;
     
    constructor TMyClass.Create;
    begin
      PR_Count := 0;
      PR_Timer := TTimer.Create(nil);
      PR_Timer.Interval := 1000;
      PR_Timer.OnTimer := @MyOnTimer;
      // Si je ne mets pas le timer en route le programme ne génère aucune erreur
      // Le problème viendrait donc de là...
      PR_Timer.Enabled := True;
    end;
     
    destructor TMyClass.Destroy;
    begin
      PR_Timer.Free;
    end;
     
    end.
    Si quelqu'un à une idée, voir une solution je suis prenneur !

    Quelques infos:
    - Lazarus v0.9.26 beta
    - FPC v2.2.2
    - OS Linux (32 bits)

    L'erreur générée:
    [slander@localhost TestTimer]$ ./TestTimer
    [FORMS.PP] ExceptionOccurred
    Sender=EAccessViolation
    Exception=Access violation
    Stack trace:
    $0811107A TCUSTOMTIMER__UPDATETIMER, line 136 of customtimer.pas
    $08111172 TCUSTOMTIMER__SETONTIMER, line 172 of customtimer.pas
    $080799C3 TMYCLASS__CREATE, line 37 of Timer.pas
    $08048537 main, line 15 of TestTimer.lpr
    TApplication.HandleException Access violation
    Stack trace:
    $0811107A TCUSTOMTIMER__UPDATETIMER, line 136 of customtimer.pas
    $08111172 TCUSTOMTIMER__SETONTIMER, line 172 of customtimer.pas
    $080799C3 TMYCLASS__CREATE, line 37 of Timer.pas
    $08048537 main, line 15 of TestTimer.lpr
    [FORMS.PP] ExceptionOccurred
    Bonne journée à tous et toutes,

    Slander

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Points : 80
    Points
    80
    Par défaut
    Bonsoir,

    C'est étonnant, parce que j'utilise un timer mais dans une interface graphique et là il n'y a pas de problème.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Bonsoir,

    Effectivement après test, dans une application graphique cela fonctionne très bien...
    Je ne comprends alors pas du tout d'où la violation d'accès peut débarquer...

    Après plusieurs tests, il s'avère que si je commente cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      PR_Timer.OnTimer := @MyOnTimer;
    Je n'ai plus d'erreur... Et dans mon application graphique cette même ligne ne pose aucun problème...

    Encore une fois je reste perplexe...

    Slander

Discussions similaires

  1. problème de violation d'accès avec createprocess
    Par sevyc64 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 01/04/2014, 15h37
  2. Problème de violation d'accès avec Array
    Par kracter56 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/06/2012, 10h27
  3. Problème d'accès Access 2007 avec Vista
    Par jamesleouf dans le forum Access
    Réponses: 3
    Dernier message: 05/11/2008, 04h17
  4. Problème d'Access Violation avec lfind
    Par beegees dans le forum C
    Réponses: 4
    Dernier message: 22/01/2008, 16h00
  5. Réponses: 22
    Dernier message: 28/11/2007, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo