Newsgroup: it.comp.programmare.win32
Titolo: Critical Section

Ciao a tutti.
qualcuno mi spiegherebbe come funzionano le Critical Section?
Il mio problema:
2 Thread: Main e Thread1
Io utilizzo 2 Forms: la pagina principale definita come MDI form e la
finestra figlia (MDIChild) contenente il campo Edit1 che viene
aggiornato dal Thread1.
Vorrei utilizzare le Critical Section perche' qualche volta mi viene
dato un "Access violation" quando chiudo la finestra child (suppongo che
l'errore derivi dal fatto che si tenta di aggiornare un campo che in realtà
e' stato già chiuso).
In sostanza:
1) Dove deve essere definita la Critical Section? (ossia cosa significa
attribuire alla Critical Section la memoria che si vuole proteggere?)
2) E' il thread di aggiornamento che deve chiamare i metodi Acquire e
Release?
Grazie 1000.
Max
P.S. Al limite ... qualche altra idea per risolvere il problema?

 P.S. Al limite ... qualche altra idea per risolvere il problema?
Se vuoi un riferimento dove, in forma teorica e indipendente dal SO, e'
descritto (con altri) il concetto che ti interessa, eccolo :
ACM Computing Surveys Vol. 15, No. 1, March 1983
Gregory R. Andrews, Fred B. Schneider
"Concepts and Notations for Concurrent Programming"
E' un riferimento molto datato, ma, dato il carattere "di base" delle
informazioni che contiene, lo direi ancora oggi molto utile.
Saluti. Andrea.

 P.S. Al limite ... qualche altra idea per risolvere il problema?
Crea un Mutex. La sezione del Mutex interessata dovra' verificare che
la finestra e' ancora aperta e quindi aggiornare il dato. Dopo di
che lo devi rilasciare. Guardati la sezione riguardante i Mutex
e Critical Section sull'SDK.
In alternativa puoi utilizzare una gestione dell'anomalia venutasi
a creare con la violazione di accesso con try{} catch{}. Ma
stilisticamente fa poco meno che schifo; per esempio sotto Unix
simili comportamenti non sono consentiti....a meno che "segmentation
fault" non sia l'output del tuo programma. :^)
Ciao.
Il Michett@
--
-- 
Posted from 
relay2.inwind.it
 [212.141.53.73] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 writes:
M> Ciao a tutti.
M> qualcuno mi spiegherebbe come funzionano le Critical Section?
Il libro di Richter "Programmazione Avanzata in Windows" al capitolo 9.
+----------------------------------------------------------------+
| Gian Uberto Lauri * "So, are you working on fixing that bug    |
| 
sa...@eng.it
      *  *now* or leaving it until later ?" - YES  |
+----------------------------------------------------------------+
| Attenzione: rispondo ad ogni invio di pubblicità non richiesta | 
| o spam di qualsiasi altro genere con un messaggio al provider  |
| di competenza. Ai sensi della legge sulla privacy NON avete il |
| permesso di utilizzare i miei dati per questi scopi.           |
+----------------------------------------------------------------+

qualcuno mi spiegherebbe come funzionano le Critical Section?
Preso al volo da MSDN sezione SDK:
CRITICAL_SECTION CriticalSection; 
// Initialize the critical section.
InitializeCriticalSection(&CriticalSection); 
// Request ownership of the critical section.
__try 
{
    EnterCriticalSection(&CriticalSection); 
    // Access the shared resource.
}
__finally 
{
    // Release ownership of the critical section.
    LeaveCriticalSection(&CriticalSection);
    // Release resources used by the critical section object.
    DeleteCriticalSection(&CriticalSection)
}
-------------------------------------
Oppure puoi usare più comodamente la classe CCriticalSection
(Lock/UnLock).
Luc.

 > qualcuno mi spiegherebbe come funzionano le Critical Section?

Anche a me era venuto in mente l'utilizzo di un mutex; il problema e' che la
verifica che la finestra sia ancora la devo fare in testa alla subroutine di
aggiornamento; questo significa che se quando entra verificando la
condizione subito dopo chiudo la finestra viene provocato
l'errore;...purtroppo temo che la restrizione di accesso tramite Critical
section oppure il lock sia l'unica strada percorribile!!! O sbaglio?
Max