Hi,
ich bin grad dabei eine multithreading applikation zu schreiben bei der ich mittels postthreadmessage und peekmessage daten zwischen den threads hin und herschieben. mein problem ist jetzt das ich den speicher den ich mit getmem in thread a allociere und dann an thread b schicke in thread b mit freemem nicht mehr freigeben kann. Hier mal en code ausschnitt.
Code:
Const
CMD_FORWARD = WM_USER+10;
Thread A
var
puffer:PByte;
begin
while not terminated
...
GetMem(puffer,receive.dwDataSize);
ZeroMemory(puffer,receive.dwDataSize);
copymemory(puffer,receive.Daten,receive.dwDataSize);
PostThreadMessage(ThreadB.threadid,CMD_FOWARD,receive.dwDataSize,Cardinal(puffer));
...
end;
Thread B
var
receive:PByte;
begin
while not terminated
...
repeat
PeekMessage(msg,0,WM_USER,WM_APP,PM_REMOVE);
until (msg.message=CMD_FOWARD)or terminated;
if terminated then exit;
receive:=Pointer(msg.lParam);
...
FreeMem(receive,msg.wParam);
end;
receive is ne datenstrukutr in der ich meine daten ablege.
der erste durchlauf in thread b funktioniert Problemlos. beim zweiten bekomm ich ne
exception von wegen "ungültige Zeigeroperation". wobei getlasterror 0 ausgibt.
Jemand ne ahnung was ich falsch mache? kenn mich mit multithreading, messages und dynamischem speicher leider noch nicht so gut aus.
Thx
Blizzard