Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF – vaše škola fotografie

 

Kdo lektoruje pražský letní workshop v ZOO a Botanické zahradě?

V dnešní soutěži hrajeme o:

Dárkový certifikát v hodnotě 1000 Kč



Thready - Critical Section

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Thready - Critical Section

Autor: Mi.Chal

19:29:50 24.11.2011

Jan12 Napsal:
-------------------------------------------------------
> ještě mám dotaz na upřesnění - pokud s těmi
> proměnnými pracuji i v hlavním formuláři, musím
> mít tuto critical_section definovanou i v něm????

to zalezi predevsim na tom, co chces delat, jestli to vyzaduje synchronizaci; treba pristup k VCL komponentam vyzadoval pristup z hlavniho vlakna. To se v BCB delalo volanim metody Synchronize na TThread. Kde bude ta critical section deklarovana je snad jedno, zalezi na tom, jak s tim formularem pracujes. Pokud budes mit v critical_section cele volani metody z formulare (takze o zadne CS nevi), tak neni duvod, aby v nem byla.

Citovat příspěvek

 

Re: Thready - Critical Section

Autor: Jan12

22:04:43 22.11.2011

Děkuji za odpovědi

>>nejspis pouzivas pokazde jiny objekt - ta CRITICAL_SECTION by afaik mela byt sdilena a pouzivana obema thready, jinak to neni stejna sekce, ale delas pokazde novou

ještě mám dotaz na upřesnění - pokud s těmi proměnnými pracuji i v hlavním formuláři, musím mít tuto critical_section definovanou i v něm????

Citovat příspěvek

 

Re: Thready - Critical Section

Autor: Mi.Chal

19:42:44 22.11.2011

Jan12 Napsal:
-------------------------------------------------------
> Měljsem za to že se thready potkají a zřítí se mi
> program - k tomu ale nedošlo. Nechápu proč,
> zkoušel jsem to i s řetězcem a podobně. Oba dva
> thready běží - dle různých změn celkové hodnoty
> nebo výpisů řetězcových hodnot.

proc by mel? Prace s ciselnou promennou nebude problem, ta bude vetsinou atomicka. Problem muze byt pri praci se slozitejsimi typy, pak se ti muze stat, ze bude promenna obsahovat nesmyslne hodnoty, kdy cast se prepise jednim threadem a dojde k prepnuti kontextu driv, nez se ulozi zbytek. Zalezi taky na tom, jestli pracujes s thread-safe typem.

> 3) Tato sekce je použitelná pouze na jednu
> proměnou nebo více proměných

to je snad jedno - proste co je mezi Enter a Leave, tam muze jenom jeden thread. Co se uvnitr deje je jedno.

> 4) Měl jsem za to že pokud nevložím
> LeaveCriticalSection že zůstane proměná
> zablokovaná - tudíž že ji ostatní nemůžou
> používat, to se ale nestalo - Kde je co špatně?

nejspis pouzivas pokazde jiny objekt - ta CRITICAL_SECTION by afaik mela byt sdilena a pouzivana obema thready, jinak to neni stejna sekce, ale delas pokazde novou

Citovat příspěvek

 

Thready - Critical Section

Autor: Jan12

11:43:40 22.11.2011

Dobrý den,

chtěl jsem si ověřit safe-mode threadu a nevím jak na to...., Z různých článků jsem zkusil složit nějaký ten pokus.

Založil jsem si formulář, v něm vytvořil globální proměnou kterou si pomocí timeru neustále zobrazuji v Editu. K tomuto projektu jsem přidal dva samostatné thready, v jednom hodnotu zvětšuji, v druhém zase zmenšuji - abych viděl zda se vůbec něco děje.

Měljsem za to že se thready potkají a zřítí se mi program - k tomu ale nedošlo. Nechápu proč, zkoušel jsem to i s řetězcem a podobně. Oba dva thready běží - dle různých změn celkové hodnoty nebo výpisů řetězcových hodnot.

Jinak jako návod na používání jsem nalezl toto

v threadu ve fci (loop) mám


static CRITICAL_SECTION cs;
InitializeCriticalSection(&cs);
EnterCriticalSection(&cs);

//.. zde moje fce
globalni_promena_1 .. změna
globalni_promena_2 .. změna

LeaveCriticalSection(&cs);
DeleteCriticalSection(&cs);

Moje otázky jsou následující

1) Proč mi nezhavaroval můj pokus (nebo builder už rovnou ošetřeuje thready sám?) Používám CodeGear C++ 2009

2) Je moje použítí vůbec správné a funkční?

3) Tato sekce je použitelná pouze na jednu proměnou nebo více proměných

4) Měl jsem za to že pokud nevložím LeaveCriticalSection že zůstane proměná zablokovaná - tudíž že ji ostatní nemůžou používat, to se ale nestalo - Kde je co špatně?

děkuji za případné odpovědi

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: