Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
Das läuft im HauptThread
procedure TForm1.Button1Click(Sender: TObject);
var
tc:Cardinal;
begin
FCS.Enter;
txt := 'Button1';
tc := GetTickCount;
while GetTickCount < (tc + 5000) do Application.ProcessMessages;
Showmessage(txt);
Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
Wenn ich Speicherbereich A schützen möchte, dann nehme ich dafür ein CS mit Namen CSA.
Ich muss nun gewährleisten, dass bei jedem Zugriff auf den Speicherbereich A die CS CSA betreten und danach wieder verlassen wird.
Das ist erstmal alles.
Windows ist es egal, wieviele CS ich benutze.
Jede Instanz von einer Klasse/Thread belegt einen bestimmten Speicherbereich. Erzeuge ich mit der...
Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
Es muss aber zwingend in einer CS geschrieben/gelesen werden, ansonsten kann es dazu kommen, dass gleichzeitig geschrieben/gelesen wird und dann knallt es
Es ist egal, ob das von einer lokalen (im Thread verankerten) oder globalen CS geschützt wird. Es muss aber geschützt werden.
Aber wozu alles schützen, wenn ich genau bestimmen kann, was geschützt werden soll? (Sippenhaft und Singleton...
Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
Weil die Queue aus einem anderen Thread-Kontext abgefragt wird (Synchronize/Queue)
Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
Weil jede Thread-Instanz einen eigenen Speicherbereich hat, wo die Werte abgelegt sind.
Und ich schütze mit der Thread-internen CS den Speicherbereich der Instanz und nicht von allen Instanzen, was zwar möglich ist, aber überflüssig.
Stell dir vor ein Kühlschrank darf nur immer von einem geöffnet werden, weil sonst geht die Welt unter.
Bei deiner Methode mit der globalen CS würde das...
Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
a. Performance
b. der Thread selber ist per Definition auch threadsafe für Zugriffe von außen (über die Properties)
meine Threads übernehme ich in jedes beliebige Projekt und benutze diese ohne mich um irgendeine CS weiter zu kümmern, dann das regelt der Thread ja in sich selber.
Greift Thread A auf eine Property aus Thread B zu, dann ist die Property von Thread B ja geschützt. Somit kann...
Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
Hmmm, das sehe ich anders, wenn ich optimal laufenden Code erzeugen will mit der maximal möglichen Performance. Natürlich wird es auch mit einer externen CS funktionieren, aber eben nicht so performant wie es laufen könnte.
Beispiel:
GlobalCS : TCriticalSection;
TMyThread = class( TThread )
{...}
Info : Int64;
end;
Forum: Win32/Win64 API (native code)
Delphi
by Sir Rufo,
28. Nov 2010
Um das mit den CriticalSections mal etwas besser zu verdeutlichen habe ich mal mein WorkThread-Beispiel etwas umgeändert um folgende Situationen darzustellen:
- optimales Laufzeitverhalten mit einem Minimum an Störungen des Threads durch Zugriffe von außen (bzw. durch den Event, der ja in einem anderen Thread-Kontext läuft und somit auch einen Zugriff von außen darstellt)
- blockierndes...