Bonjour,
Voilà je vous explique mon problème :
Je crée un nouveau projet très simpe avec Builder :
- une TThread
- un bouton
- un Label
Dans le TThread, je ne met rien si ce n'est un : ";" dans sa méthode Execute();
Dans mon bouton, je crée dynamiquement ma Thread :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 //--------------------------------------------------------------------------- void __fastcall MyThread ::Execute() { ; //There is nothing or I just put a Sleep(10)! } //---------------------------------------------------------------------------
et je l'efface lorsqu'elle est finie.
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 //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { MyThread = new MyThread (false); MyThread ->OnTerminate = MyThread _End; } //--------------------------------------------------------------------------- void __fastcall TForm1::MyThread _End(TObject* Sender) { if(MyTHREAD) { delete MyTHREAD; MyTHREAD = NULL; } Label1->Caption = "Thread terminée"; } //---------------------------------------------------------------------------
J'exécute le programme et je n'ai aucune erreur! Tout fonctionne parfaitement... où est le problème alors ?
Le problème survient quand je colle un objet suiConvertor sur ma fiche. Pour ceux qui ne connaissent pas, suiConvertor est un objet des composants SUIPack qui permettent de changer le skin d'une application. Donc, comme je le disais, je pose cette objet sur la fiche je choisis, par exemple, le style MacOSX. Et mnt, je compile... je lance mon application, je clique sur le bouton! Booooooom : le Debugger de Borland s'affole => une exception a été générée...
Et hop' le programme se ferme tout seul!!! Incroyable non ? Alors où est-ce que je fais une erreur ? Pensez-vous que ça provienne des composants SUIPack? Peut-être ne supporte-t-il pas les threads... peut-être est-ce la méthode Synchronize()? Je n'en sais rien !---------------------------
Application Error
---------------------------
Exception EAccessViolation in module rtl60.bpl at 000058C4.
Access violation at address 400058C4 in module 'rtl60.bpl'. Read of address 00000010.
---------------------------
OK
---------------------------
---------------------------
Debugger Exception Notification
---------------------------
Project Project2.exe raised exception class EOSError with message 'System Error. Code: 5.
Accès refusé'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
---------------------------
Project2.exe
---------------------------
Abnormal program termination
---------------------------
OK
---------------------------
Un grand merci d'avance!
Cordialement,
Partager