AGB  ·  Datenschutz  ·  Impressum  







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

begin thread und syncronize?

Offene Frage von "richard_boderich"
Ein Thema von richard_boderich · begonnen am 3. Nov 2005 · letzter Beitrag vom 4. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

begin thread und syncronize?

  Alt 3. Nov 2005, 22:10
nabend zusammen,

ich habe eine ziemlich komplexen multithreadcode gebastetlt, der auch funktioniert. mein problem ist aber das er erst die stringgrid vcl aktualisiert wenn
alle treads beendet sind. (geht ueber critikal sections) ich will aber das er waehrend die treads laufen, die vcl aktualisiert. nun gibt es ja dazu die methode
synchronize(), die meines wissens aber nur mit dem vcl threadobject funktioniert. was mach ich aber wenn ich meinen thread direkt über begin thread starte?

gruß richard
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 22:12
Hi,

Also konkret fällt mir da jetzt auch nichts ein, aber ich würde mir den Quelltext der Synchronize() Methode anschauen und diese Funktion dann entsprechend nachbauen.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 22:18
Wenn du aus dem Thread mit SendMessage etwas an den hauptthread sendest wird auch eine Syncronisation durchgeführt weil ja die Message letztendlich über die Nachrichtenschleife des hauptthreads kommt und der Thread wartet auf das Result von dieser Message. In dem Fall sollten also Thread und Hauptthread syncron sein. Sende also aus deinem Thread eine Message mit SendMessage an ein Fenster aus dem Hauptthread (TForm1.handle etc.) und in der Methode welche die Message entgegennimmt kannst du dann auf dein StringGrid etc. zugreifen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#4

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 22:27
mhh mal gucken was lucky dazu meint
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 22:50
schneller bist du wenn du es einfach ausprobierst bzw. im MSDN nachließt. Da müsste auch stehen das Bei SendMessage gewartet wird bis das Result der Message zurück kommt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 22:52
Zitat von richard_boderich:
mhh mal gucken was lucky dazu meint
Genau das selbe wie SirThornberry.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 23:00
und hier mal ein kleines Beispiel wo man genau sieht das der Thread wartet:
Delphi-Quellcode:
type
  [...]
  procedure FMsgProc(var AMsg: TMessage); message wm_user + 1;
  [...]
  
function GThreadFunc(p: Pointer): Integer;
begin
  SendMessage(Cardinal(p), wm_User + 1, 0, 0);
  MessageBox(0, 'text aus thread', '', 0);
end;

procedure TForm1.FMsgProc(var AMsg: TMessage);
begin
  MessageBox(0, 'text aus hauptthread', '', 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var LID: Cardinal;
begin
  BeginThread(nil, 0, @GThreadFunc, Pointer(Handle), 0, LID);
end;
Bei diesem Beispiel wird beim Klick auf einen Button der Thread gestartet. In dem Thread wird dann ein SendMessage an den haupttread gemacht und erst nach diesem SendMessage gibt der Thread etwas aus. Man sieht bei dem Beispiel also das erst die Message "text aus haupttread" kommt und erst wenn man dort auf "ok" klickt und somit das Sendmessage zurück kehrt dann der text "text aus thread" kommt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 23:01
ja aber ist das den ein sinnvoller weg das so zu machen oder ist es besser den code neu auf vcl threadobject umzuschreiben?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 23:04
der Weg ist schon sinnvoll. Die Syncronize Methode macht ja auch nix anderes als dafür zu sorgen das der Thread nicht weiter läuft während im Hauptthread etwas abgearbeitet wird. Und mit dem SendMessage ereichtst du genau das, der Thread macht nix bevor du nicht aus diesem messagehandler zurück kehrst. Und da der Thread nix macht, also auf keine Variablen etc. zugreift kann auch nix schief gehen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#10

Re: begin thread und syncronize?

  Alt 3. Nov 2005, 23:09
das heist also

1. thread erzeugen
2. message aus thread an hauptread senden
3. meinen code aufrufen stringgrid1.cell[x,y]:='blablabla';
4. message aus hauptread an tread senden und im sagen mach weiter!

hab ich das prinzip jetzt so richtig verstanden?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:02 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