Passage d'argument à un thread
Salut salut, voila j'ai un petit soucis concernant le passage de paramètre à un thread.
Voila d'abord le bout de code :
Code:
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 49 50 51 52 53 54 55 56 57 58 59 60
|
(*Déclaration dans la classe TWiimote*)
class function cReadParseThreadFunction(param : Pointer)
: Cardinal; virtual; stdcall; export;
function bBeginAsyncRead () : Boolean; virtual; stdcall; export;
(* Fonction bBeginAsyncRead *)
function T_Wiimote.bBeginAsyncRead () : Boolean; stdcall; export;
var
read, err : DWORD;
ThreadId : Cardinal;
label
ended;
begin
wiimote := self;
if(not ReadFile(m_Handle, m_ReadBuff, REPORT_LENGTH, read, @m_Overlapped))
then
begin
err := GetLastError();
if(err <> ERROR_IO_PENDING)
then
begin
Writeln ('WARNING : Readfile failed');
result := false;
goto ended;
end; //Fin condition err
end; //Fin condition ReadFile
if(m_ReadParseThread = 0)
then
begin
m_ReadParseThread := THandle(BeginThread(nil, 0,
Addr(T_Wiimote.cReadParseThreadFunction), Addr(self), 0, ThreadId));
result := true;
ended:
end;
(*La fonction thread *)
class function T_Wiimote.cReadParseThreadFunction(param : Pointer) : Cardinal;
stdcall; export;
var
remote : T_Wiimote;
overlapped : TOverlapped;
exit_code : Cardinal;
wait,time,read : DWord;
label
connection_lost_label;
begin
remote := (PT_Wiimote(param))^;
overlapped := remote.m_Overlapped; |
Voila seulement l'addresse contenu dans param ne correspond pas du tout à l'adresse de l'instance de la classe. Donc, je voudrais savoir si quelqu'un pouvait m'éclairer sur la situation. Merci !