Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Neko elegantno rešenje za zatvaranje tredova ?

[es] :: C/C++ programiranje :: Neko elegantno rešenje za zatvaranje tredova ?

[ Pregleda: 3684 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

headstrong
IT Sektor
SCG

Član broj: 5194
Poruke: 40
*.ptt.yu



Profil

icon Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 00:01 - pre 261 meseci
Da li je moguće rešiti sledeći problem.
Radim "multithread" aplikaciju za Win32 platforme. Zbog brzine sam se odlučio da koristim API.
E sad, kada detektujem kritičnu grešku u jednom od tredova, treba da nekako naložim zatvarnje i ostalih tredova, ne želeći da koristim diskutabilnu f-ju TerminateThreads(), jer svaki od tredova treba da obavi "cleanup" alocirane memorije, a biće mi eventualno potrebno da se zatvaranje tredova detektuje i u linkovanom dll-u.
Da li postoji neko elegantno rešenje sa npr. izazivanjem nečega poput interapta u ostalim tredovima, pa da se oni regularno pozatvaraju nakon toga?
 
Odgovor na temu

silverglider

Član broj: 651
Poruke: 218
62.104.203.*

Sajt: www.benchmark.co.yu


Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 01:22 - pre 261 meseci
Pa kreiraj svoj event (ne event kao obrada windows WM_ message poruka kroz event-handler), nego kao Event objekat. Posto se i on kreira kroz windows API, vide ga svi threadovi (tj, event objekti se i koriste za 'razgovor' medju threadovima). Dakle, stanje signaliziras sa setevent, a u threadu u execute funkciji, hvatas taj signal sa waitfor.
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.beotel.net

ICQ: 44582291


+58 Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 10:46 - pre 261 meseci
mozda lupam a mozda i nije najbolje resenje ali ako imas petlju poruka u threadovima onda mozes da saljes npr WM_QUIT preko PostThreadMessage();

-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 14:23 - pre 261 meseci
Ne moraju svi threadovi (ali uglavnom je to u zavisnosti od slucaja) da imaju prozore, odnosno message queue. S toga u zavisnosti od strukture tvog programa to mozda i ne bi bilo srecno resenje.
Uglavnom kao sto je gore navedeno, mozes da napravis svoj event ili ako koristis kompatibilnu funciju _beginthread() mozes jednostavno da iz napravljenog threada da pozoves _endthread().
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.beotel.net

ICQ: 44582291


+58 Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 14:59 - pre 261 meseci
pa ja nisam rekao da treba da imaju prozore, PostThreadMessage()
salje poruku u msg queue koju posle skida GetMessage() a ne direktno u win proceduru, dakle prozor nije potreban vec samo msg loop
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.sc.philips.com



+1001 Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 20:48 - pre 261 meseci
Resenje sa eventima radi odlicno u svim okruzenjima (C/C++/VisualC++/MFC) i u svim scenarijima.

MessagePump je podrzana striktno u Win32 okruzenju, gde se svakom worker thread-u moze dinamicki kreirati MessageLoop (a da mu se ne dodeljuje window).
U MFC okruzenju zahteva se malo drugaciji pristup, tj. zahteva se odluka
Worker vs. GUI thread odmah na pocetku, a cini mi se da su podrsku za GUI thread napisali malo muljavo i mutavo.

Najbolja diskusija u vezi ovog problema moze se naci u knjizi Jim Beveridge-a "Multihtreading Applications in Win32", koju od srca preporucujem kao bibliju za multithreading. Mala knjiga, ali suva esencija.
 
Odgovor na temu

doomed
NS/PO

Član broj: 736
Poruke: 180
*.ptt.yu



Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?24.10.2002. u 00:17 - pre 261 meseci
a ima li negde da se skine za DZ ta knjiga?...
Ako treba onda nema potrebe
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?24.10.2002. u 02:27 - pre 261 meseci
Ne poznajem strukturu programa tako da ne mogu odredjenije da napisem, ali da, ne mora da ima dodeljen prozor. I pored toga ne preporucujem ovo jer postoje dosta elegantnija i bezbednija resenja (izmedju ostalih i gore navedena). Ukazao bih jos samo da ako se ipak koristi ova opcija, nisam siguran da bi u ovom slucaju mogla da se koristi bas WM_QUIT poruka vec WM_USER (ili visa definisana), i u MSG strukturi hwnd polje je NULL.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Neko elegantno rešenje za zatvaranje tredova ?

[ Pregleda: 3684 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.