Exécuter une méthode d'un objet dans un Thread

Exécuter une méthode d'un objet dans un Thread - Delphi/Pascal - Programmation

Marsh Posté le 19-06-2005 à 17:07:58    

Salut les gens,
 
J'ai un objet qui a une méthode qui effectue un certain traitement.
 
Problème : j'utilise l'api CreateThread de Windows pour exécuter les méthodes sauf que je ne peux pas exécuter une méthode d'un objet, j'ai un message d'erreur :
 

--> [Error] Unit1.pas(90): Variable required


 
la tête de la fonction :

function TForm1.grimpe: boolean;


le lancement du thread :

MonThread := CreateThread(nil, 0, @grimpe, nil, 0, id);


Voilà le prototype de la fonction :

HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes  
    DWORD dwStackSize, // initial thread stack size, in bytes  
    LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function  
    LPVOID lpParameter, // argument for new thread  
    DWORD dwCreationFlags, // creation flags  
    LPDWORD lpThreadId  // pointer to returned thread identifier  
   );


sachant que cela fonctionne parfaitement si je met ceci :

function grimpe: boolean;


 
Donc dès que je dis que la fonction appartient à Form1, ça ne passe plus. Donc vu que c'est le même principe avec un Objet perso, je sais pas comment faire :(

Reply

Marsh Posté le 19-06-2005 à 17:07:58   

Reply

Marsh Posté le 20-06-2005 à 11:23:20    

Elle doit avoir quel style la fonction ? A priori une méthode c'est juste une fonction/procédure qui a un premier paramètre "Self: TObject" caché.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-06-2005 à 13:34:16    

La fonction appelée par le thread doit être de ce type :
 

DWORD WINAPI ThreadFunc( LPVOID );


 
En delphi, je me suis renseigné, on doit l'écrire comme ça :
 

function MaFonction(Ptr:Pointer):DWORD;stdcall;


 
Mais si "MaFonction" est une méthode d'un objet, ça ne fonctionne pas -> "Variable Required" me dit-il..et si je retire l'appartenance à un objet, ça marche...c'est ce que j'ai fait :D

Reply

Marsh Posté le 20-06-2005 à 13:40:00    

Mélanger des fonctions C et des objets c'est pas simple :o Tu peux pas faire une fonction simple qui appelera elle-même la méthode ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-06-2005 à 17:17:17    

il y a un objet TThread (classe abstraite) qui fonctionne plutôt pas mal pour implémenter des Threads.
 
Une procédure et une procédure de classe sont gérés différemment. Il me semble que la procédure de classe est déjà un pointeur. (j'en mettrais pas ma main à couper au feu)

Reply

Marsh Posté le 29-06-2005 à 17:30:46    

Non ben finalement j'ai bricolé et ça marche nikel :)

Reply

Marsh Posté le 29-06-2005 à 17:48:22    

Reply

Marsh Posté le 29-06-2005 à 17:53:23    

Oui tout à fait :D et honnêtement, j'ai appris plein de truc grâce aux API Win32 que je n'aurai sû en utilisant les trucs de Delphi ;) Et perso je kiffe à mort :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed