AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Synchronisierung von Subthreads (VCL) + Pointerzugriff
Thema durchsuchen
Ansicht
Themen-Optionen

Synchronisierung von Subthreads (VCL) + Pointerzugriff

Ein Thema von markusj · begonnen am 22. Apr 2006 · letzter Beitrag vom 29. Apr 2006
Antwort Antwort
Seite 2 von 4     12 34      
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#11

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 23. Apr 2006, 10:50
Das bedeutet, dass ich wieder ein TCriticalSections als Globale Variable brauche?
Und wenn ich zwei Subthreads aufeinander Zugreifen lasse? Brauche ich dann auch ein globales Critical Section? Oder reicht es, wenn ich es bei einem Thread als public deklariere und dessen Unit per Uses einbinde?

mfG

Markus
Markus
  Mit Zitat antworten Zitat
HERMES

Registriert seit: 29. Nov 2004
142 Beiträge
 
#12

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 23. Apr 2006, 11:56
Es ist egal wie du es machst, aber die Threads müssen das selbe CriticalSection Objelt benutzen, damit eine Synchronisation stattfindet.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 23. Apr 2006, 12:14
Du musst Dir überlegen, in wessen Kontext die Variable lebt.
Wenn z.B. Thread1 irgendetwas deklariert, verwendet oder kontrolliert, dann packst Du die Eigenschaft in Thread1:
Delphi-Quellcode:
Type
  TMyThread = Class (TThread)
  Private
    fMyCS : TCriticalSection;
  Public
    Property MyValue : TSomeType Read GetValue Write SetValue;
  End;
...
Oder du deklarierst Dir eine eigene Klasse, die den threadsicheren Zugriff implementiert. Das würde ich empfehlen, wenn die Eigentusverhältnisse nicht eindeutig geklärt sind. Alles eine Frage der Sichtweise: Die Implementierung ist in jedem Fall ähnlich.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#14

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 23. Apr 2006, 15:12
Vielen Dank,

ich denke, ich werd das Objekt in den Unter-Unter-Thread Packen, welcher bei den beiden anderen über uses eingebunden ist
--> Zugriff auf das public-Objekt var csMan : TCriticalSection sollte möglich sein ... wenn nicht, bitte warnen *g*

mfG

Markus
Markus
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#15

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 23. Apr 2006, 16:51
So, mir ist gerade noch eine ganz neue Idee gekommen ...
Ist es möglich, eine ganz normale Klasse einfach zu einenm Thread umzumodden?
Kann ich dann auf dessen Methoden zugreifen, und wenn ja, werden die dann im Hauptthread oder im Subthread ausgeführt?
BTW: Was passiert nach dem Execute? Ich meine, wenn der Code abgearbeitet ist, und kein FreeOnTerminate aktiviert ist? Ist der Thread dann Suspended? In welchem Zusand befindet er sich dann?

mfG

Markus
Markus
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#16

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 24. Apr 2006, 13:57
*push*
Markus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#17

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 24. Apr 2006, 15:40
Wenn du nur auf einen 1-, 2-, oder 4-Byte-Wert zugreifen willst, dann sollte es keine Probleme geben, wenn diese zur selben Zeit ausgelesen werden, nur beim ändern mußt du aufpassen, aber eventuell hilft da auch schon ein kurzer Umschalter in den SingelThreadModus.

Var B: ByteBool;

auslesen wie immer
z.B.
If B Then ... Und das Setzen
Delphi-Quellcode:
//B := True;
ASM
  LOCK MOV &B, $FF
End;

//B := False;
ASM
  LOCK MOV &B, 0
End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#18

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 24. Apr 2006, 16:01
Könntest du mir kurz erklären, was dieser Code macht/bedeutet? Ich kann leider (noch) kein ASM ...
Ach ja, die anderen Fragen in den Posts 14 und 15 "dürfen" auch beantwortet werden *g*

ansonsten, Danke!

mfG

Markus
Markus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#19

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 24. Apr 2006, 17:14
Im Grunde sind es jeweils 2 Befehle.

Dieses kopiert den Wert/Inhalt von x2 nach x1
Code:
MOV x1, x2
Hier also den Wert $FF in den Speicherbereich der Variable B.
Code:
MOV &B, $FF
Wobei das obere nur die Kurzfassung ist, ausfühlich würde es so aussehn, wobei B eigentlich ein Pointer (hier ist es ein BYTEPoinTeR) zu einem bestimmten Speicherbereich ist:
Code:
MOV BYTE PTR &B, $FF
MOV BYTE PTR [Pointer], $FF
Das LOCK ist ein Befehl, welcher die CPU für den nachfolgenden Befehl in einen Singlethreadmodus schaltet, es wird also sozusagen nur der nachfolgende Befehlausgeführt, während die anderen threads warten ... somit kann also kein anderer Thread wärend dieser Zeit Befehl ausführen, welcher zu dieser Zeit eventuell auch auf deisen Speicherbereich zugreifen könnte (es läuft ja schließlich Keiner)

alsoLOCK MOV BYTE PTR &B, $FF oderLOCK MOV &B, $FF setzt alle Bits (ist beim ByteBounter halt besser) auf 1 und somit auf TRUE, ohne daß zur selben Zeit ein anderer Thread auf B zugreifen kann.
Darum kann man auch ganz normal lesend auf B zugreifen, ohne das es Probleme gibt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#20

Re: Synchronisierung von Subthreads (VCL) + Pointerzugriff

  Alt 24. Apr 2006, 17:40
Danke!

EDIT:

Zitat von markusj:
So, mir ist gerade noch eine ganz neue Idee gekommen ...
Ist es möglich, eine ganz normale Klasse einfach zu einenm Thread umzumodden?
Kann ich dann auf dessen Methoden zugreifen, und wenn ja, werden die dann im Hauptthread oder im Subthread ausgeführt?
BTW: Was passiert nach dem Execute? Ich meine, wenn der Code abgearbeitet ist, und kein FreeOnTerminate aktiviert ist? Ist der Thread dann Suspended? In welchem Zusand befindet er sich dann?

mfG

Markus
Wie siehts damit aus?
Markus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 10:51 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