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

Neko elegantno rešenje za zatvaranje tredova ?

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

[ Pregleda: 1261 | Odgovora: 7 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

headstrong
SCG

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



Profil

icon Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 00:01

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?
23.10.2002. u 00:01 

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
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.
23.10.2002. u 01:22 

Mikky

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

ICQ: 44582291
Sajt: www.asmdev.net


Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 10:46
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.
23.10.2002. u 10:46 

Milan Aksic

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



Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 14:23
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().
23.10.2002. u 14:23 

Mikky

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

ICQ: 44582291
Sajt: www.asmdev.net


Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 14:59
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.
23.10.2002. u 14:59 

milanche
San Francisco

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



Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?23.10.2002. u 20:48
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.
23.10.2002. u 20:48 

doomed
NS/PO

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



Profil

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

Milan Aksic

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



Profil

icon Re: Neko elegantno rešenje za zatvaranje tredova ?24.10.2002. u 02:27
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.
24.10.2002. u 02:27 

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

[ Pregleda: 1261 | Odgovora: 7 ]

Postavi temu Odgovori

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