AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Record von Thread an MainApplication?

Ein Thema von creality · begonnen am 26. Jun 2007 · letzter Beitrag vom 26. Jun 2007
Antwort Antwort
Benutzerbild von creality
creality

Registriert seit: 14. Mai 2007
Ort: Double D Town
39 Beiträge
 
Delphi 2007 Professional
 
#1

Record von Thread an MainApplication?

  Alt 26. Jun 2007, 10:13
Hallo Forum,

zur Zeit nehme ich diese Methode um Messages aus Threads heraus (OHNE SYNCHRONIZE!!!) an meine MainApp zu verschicken:

AUSSM THREAD:
Delphi-Quellcode:
{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;
IN DER MAINAPP

Delphi-Quellcode:
{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;
So klappts ohne Performanceeinbrüche.

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?
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: Record von Thread an MainApplication?

  Alt 26. Jun 2007, 10:21
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.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von creality
creality

Registriert seit: 14. Mai 2007
Ort: Double D Town
39 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Record von Thread an MainApplication?

  Alt 26. Jun 2007, 10:31
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.
  Mit Zitat antworten Zitat
Benutzerbild von creality
creality

Registriert seit: 14. Mai 2007
Ort: Double D Town
39 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Record von Thread an MainApplication?

  Alt 26. Jun 2007, 10:35
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?
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Record von Thread an MainApplication?

  Alt 26. Jun 2007, 10:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von creality
creality

Registriert seit: 14. Mai 2007
Ort: Double D Town
39 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Record von Thread an MainApplication?

  Alt 26. Jun 2007, 10:44
Danke!

Ich werds mal ausbessern und probieren
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz