Napisałem sobie pewien programik, który wątkowo oblicza pewne rzeczy.
Stworzyłem sobie nowy typ np.:
PResult = ^TResult;
TResult = record
Value:int64;
Divides:int64;
Number:int64;
Item:integer;
end;
Następnie w wątku alokuję sobie pamięć dla tego typu i przekazuję wynik do wątku głównego w następujący sposób:
procedure TDThread.Execute;
var Resultt:PResult;
begin
...
new(Resultt);
Resultt^.Value:=a;
Resultt^.Divides:=b;
Resultt^.Number:=c;
Resultt^.Item:=d;
PostMessage(FormHandle,WM_NEWRESULT,integer(Resultt),e);
...
end;
Na formie mam zdefiniowaną obsługę komunikatu WM_NEWRESULT gdzie następuje odczyt przekazanych danych i zwolnienie pamięci:
procedure TForm7.WMNewResult(var Msg: TMessage);
var Results:PResult;
begin
Results:=pointer(Msg.WParam);
...
Dispose(Results);
end;
Chciałbym w podobny sposób zrobić coś takiego by wątek np. wygenerował jakiś obrazek np. na Canvasie klasy TBitmap i w jakiś sposób go przekazać do wątku głównego. Niestety klasy nie mogą znajdować się w rekordach.
Jedyny pomysł jaki mi przyszedł do głowy to zapisywanie obrazka z TBitmap do pliku i przekazywanie przez wpis w rekordzie stringa z nazwą pliku, gdzie w obsłudze komunikatu następowałby odczyt z utworzonego pliku. Pewnym jest jednak, że byłaby to zbyt powolna metoda.
Pozdrawiam.