![]() |
Record von Thread an MainApplication?
Hallo Forum,
zur Zeit nehme ich diese Methode um Messages aus Threads heraus (OHNE SYNCHRONIZE!!!) an meine MainApp zu verschicken: AUSSM THREAD:
Delphi-Quellcode:
IN DER MAINAPP
{Message to Main --------------------------------------------------------------}
procedure PreProcessing_RED.PostToRedConsole(msg: shortstring); var msgstrptr: PShortstring; begin new(msgstrptr); msgstrptr^ := msg; postmessage(EyePiU_main.handle, RedMsg, integer(msgstrptr), 0); end;
Delphi-Quellcode:
So klappts ohne Performanceeinbrüche.
{MessageFromChannelRed --------------------------------------------------------}
procedure TEyePiU_main.OnREDChannelMessage(var MR: TMessage); var msgstrptr: PShortstring; begin msgstrptr := ptr(MR.wparam); memo_RED.lines.Insert(0, msgstrptr^); dispose(msgstrptr); end; Meine Frage nun...wie kann man ein Record oder ein Array statt einer Message übergeben? Und wie kommt man dann in der MainApp auf die einzelnen Record oder Array Elemente? |
Re: Record von Thread an MainApplication?
Du könntest einen Pointer auf einen Array/Record/etc über den LParam-Parameter übergeben.
Vorraussetzung ist dann allerdings, dass dieser in der Zwischenzeit nicht verändert wird. |
Re: Record von Thread an MainApplication?
hmm...der Thread füllt das Array mit Daten während der Laufzeit. Am Ende soll er das Array übergeben. Im Prinzip dürfte der Pointer nicht verändert werden. Allerdings gibts noch 5 weitere Threads die ebenfalls mitarbeiten. Bin mir nicht sicher ob nicht doch was verändert wird.
|
Re: Record von Thread an MainApplication?
Achso...
Was passiert wenn der Pointer übergeben wurde und der Thread wird Terminiert. Dann müssten doch alle Resourcen freigegeben werden also auch das Array auf das der Pointer zeigt. Oder? |
Re: Record von Thread an MainApplication?
postmessage(EyePiU_main.handle, RedMsg, 0, LPARAM(msgstrptr));
ist besser. Immer die korrekte Umtypung benutzen und der wParam ist (theoretisch) nicht geeignet einen Pointer aufzunehmen. Was du machst ist einen eigenen Speicherblock zu alloziieren und die zu uebergebenden Daten dort hineinzutun. PostMessage fuehrt eine Synchronisation aus. Es ist alles in Ordnung. Willst du ein Record uebergeben, dann einfach statt ShortString den Record-Typ verwenden. |
Re: Record von Thread an MainApplication?
Danke!
Ich werds mal ausbessern und probieren :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz