Exécuter une méthode d'un objet dans un Thread - Delphi/Pascal - Programmation
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é.
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
Marsh Posté le 20-06-2005 à 13:40:00
Mélanger des fonctions C et des objets c'est pas simple Tu peux pas faire une fonction simple qui appelera elle-même la méthode ?
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)
Marsh Posté le 29-06-2005 à 17:48:22
Olyv a écrit : il y a un objet TThread |
Il n'en voulait pas :
http://forum.hardware.fr/forum2.ph [...] 7#t1026367
Marsh Posté le 29-06-2005 à 17:53:23
Oui tout à fait 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
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