Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi W1000 Symbol 'Resume' ist veraltet ???? (https://www.delphipraxis.net/149714-w1000-symbol-resume-ist-veraltet.html)

EWeiss 23. Aug 2011 14:03

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Danke sirius hab meinen Beitrag nochmal editiert.
Komme mit einigen sachen noch nicht ganz klar

gruss

sirius 23. Aug 2011 14:30

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

Zitat von Tryer (Beitrag 1118965)
Wie auch in der Delphi-Hilfe werden in jedem MSDN-Artikel leider nur Teilaspekte angesprochen.

Und so ein Teilaspekt ist halt auch folgender:
(Suche nach "SuspendThread race condition")
Zitat:

The reason is related to a possible race condition with the suspend count.
The suspend count is incremented by a call to SuspendThread(), and is
decremented by a call to ResumeThread(). If the suspend count is non-zero,
then the scheduler will mark the thread as "waiting" (or not ready), and
will not schedule the thread for processing; conversely, when the suspend
count is exactly zero, the thread is marked as "ready" and is given
processing time. The race condition occurs because access to the suspend
count is not synchronized between threads, such that it is possible for one
thread to decrement the suspend count beyond zero to a value of -1. At that
value, the thread will never be scheduled for processing.


EWeiss 23. Aug 2011 14:34

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Kann sich nochmal bitte jemand dieser Frage annehmen?
http://www.delphipraxis.net/1118970-post19.html

gruss

sirius 23. Aug 2011 14:44

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

Zitat von EWeiss (Beitrag 1119006)
Kann sich nochmal bitte jemand dieser Frage annehmen?
http://www.delphipraxis.net/1118970-post19.html

gruss

1. Such dir halt einen Namen aus (suspend ist ja leider schon vergeben; genauso: break und interrupt) Stop wäre noch übrig. Aber dann neigt man beim weitermachen dazu start zu verwenden, was ja schon vergeben ist. Das Antonym für continue ist ja discontinue. Gibts aber zumindest in meinem aktiven Wortschatz bisher nicht. Naja, lass dir was einfallen....

2. CriticalSection ist ein Handle-Objekt. EnterCriticalSection ist eine Funktion auf dieses Handle-Objekt.
TCriticalSection ist eine Klasse, welches das Handle-Objekt CriticalSection kapselt. TCriticalsection.EnterCriticalSection ist eine Methode vorheriger Klasse.
Was war eigentlich genau deine Frage?

Deine 3. Frage verstehe ich nicht.

EWeiss 23. Aug 2011 14:49

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

2. CriticalSection ist ein Handle-Objekt. EnterCriticalSection ist eine Funktion auf dieses Handle-Objekt.
TCriticalSection ist eine Klasse, welches das Handle-Objekt CriticalSection kapselt. TCriticalsection.EnterCriticalSection ist eine Methode vorheriger Klasse.
Habe dann wohl was falsch gemacht. :oops:
Dann habe ich zwar das Handle object erstellt aber keine Function welche das handle verwaltet (bzw. damit arbeitet)

Die Frage war ..
An welcher stelle ist es sinnvoll EntercriticalSection und LeaveCriticalSection in TVisDataThread.Execute unterzubringen?

wo könnte hier etwas Kritisch sein das ich EntercriticalSection verwenden muss, sollte?
Muss mal bei MS lesen wofür EntercriticalSection genau steht ;)
Verstehe die Anwendung der Function wohl noch nicht!

gruss

sirius 23. Aug 2011 14:54

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

Zitat von EWeiss (Beitrag 1119013)
Die Frage war ..
An welcher stelle ist es sinnvoll EntercriticalSection und LeaveCriticalSection in TVisDataThread.Execute unterzubringen?

wo könnte hier etwas Kritisch sein das ich EntercriticalSection verwenden muss, sollte?

Dazu eine Frage:
Welche Variablen in Execute verwendest du auch außerhalb des Threads (und zwar in dem Moment, wo der Thread läuft)?

Tryer 23. Aug 2011 15:03

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

The race condition occurs because access to the suspend
count is not synchronized between threads, such that it is possible for one
thread to decrement the suspend count beyond zero to a value of -1.
Da ausschliessliuch der Thread selber SuspendCount verringert seh ich darin kein Problem - auch wieder ein Fall wo nur das Suspend aus einem anderen Thread zum Fehler führt.

EWeiss 23. Aug 2011 15:06

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

Zitat von sirius (Beitrag 1119017)
Zitat:

Zitat von EWeiss (Beitrag 1119013)
Die Frage war ..
An welcher stelle ist es sinnvoll EntercriticalSection und LeaveCriticalSection in TVisDataThread.Execute unterzubringen?

wo könnte hier etwas Kritisch sein das ich EntercriticalSection verwenden muss, sollte?

Dazu eine Frage:
Welche Variablen in Execute verwendest du auch außerhalb des Threads (und zwar in dem Moment, wo der Thread läuft)?

FDelayMSChanged
FDelayMSChanged wird aufgerufen wenn ein neues Plugin gestartet wird und die ms sich geändert haben.

ps..
ist aber vom gleichen Thread

Delphi-Quellcode:
procedure TVisDataThread.SetDelayMS(delayMs: DWORD);
var
  tmpDelayMS: DWORD;
begin

  tmpDelayMS := delayMs;
  if tmpDelayMS < 10 then
    tmpDelayMS := 10;
  if tmpDelayMS <> FDelayMS then
  begin
    if FDelayMS <> 0 then
      FDelayMSChanged := True;
    FDelayMS := tmpDelayMS;
  end;
end;
gruss

sirius 23. Aug 2011 15:11

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

Zitat von Tryer (Beitrag 1119022)
Zitat:

The race condition occurs because access to the suspend
count is not synchronized between threads, such that it is possible for one
thread to decrement the suspend count beyond zero to a value of -1.
Da ausschliessliuch der Thread selber SuspendCount verringert seh ich darin kein Problem - auch wieder ein Fall wo nur das Suspend aus einem anderen Thread zum Fehler führt.

Eben nicht.
Dieses Problem tritt auf, wenn TmyThread Suspend aufruft und der MainThread gleichzeitig Resume aufruft, was bei deinem Code durchaus passieren kann.


Zitat:

Zitat von Emil
FDelayMSChanged
FDelayMSChanged wird aufgerufen wenn ein neues Plugin gestartet wird und die ms sich geändert haben.

Dann must du um jeden Zugriff (eigentlich nur, wenn mindestens ein Thread auch schreibend darauf zugreift) EnterCriticalSection und LeaveCriticalSection basteln (und zwar von der exakt gleichen Objektinstanz)
Allerdings hast du hier eine Variable allersimplesten Datentypes. Da reichen die interlocked-Funktionen aus und die synchronisation kann entfallen.

EWeiss 23. Aug 2011 15:15

AW: W1000 Symbol 'Resume' ist veraltet ????
 
Zitat:

Allerdings hast du hier eine Variable allersimplesten Datentypes. Da reichen die interlocked-Funktionen aus und die synchronisation kann entfallen.
Was bedeutet das ich LockFlag sowie EnterCriticalSection gar nicht verwenden muss?

Mir ging es eigentlich darum eventuelle hänger beim umschalten auf andere Plugins zu vermeiden.
Dafür scheint dann wohl EnterCriticalSection nicht das richtige zu sein.

Hab dann wohl was falsch verstanden..

Danke für deine Hilfe

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 3 von 4     123 4      

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