Article View: pl.comp.demoscena
Article #32947Re: synchro watkow na wingrozie
From: mx
Date: Thu, 31 Mar 2005 12:33
Date: Thu, 31 Mar 2005 12:33
82 lines
3430 bytes
3430 bytes
"biki" <biki@viper.pl> wrote in message
news:962A8E53Ebikikillerradomnet@193.110.122.97...
> zna sie kto dobrze na watkach w windozie?
> konkretnie chodzi mi o synchronizacje.
> chce sobie zrobic rendering i occlusion culling na osobnych watkach
> i troche mi sie to kwasi bo nie umiem posynchronizowac?
> konkretnie jest tak.
>
> glowny watek uruchamia watek cullera ktory sobie liczy widocznosc sceny
> i widoczne obiekty wrzuca do listy (na koniec)
> glowny program zaraz po tym wywolaniu zaczyna sprawdzac czy cos sie
> pojawilo na liscie i jesli tak to to renderuje. no i mam kwas..
>
>
> tak wyglada procka watku.
> robi swoje a potem sygnalizuje ze skonczyla
>
> DWORD WINAPI _ThreadFunc(LPVOID param) {
> culler *cull;
> cull=(culler*)param;
> cull->OcclusionCulling();
> cull->culling_in_progress=0;
> }
>
> tu ustawiam flage zeruje liste i odpalam watek
> void culler::ThreadedOcclusionCulling(void) {
> culling_in_progress=1;
> items=NULL; tail=NULL;
> othread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_ThreadFunc,this,0,
> &thread_id);
> }
>
> tu pobieram pierwszy element na liscie
> jesli jeszcze nie ma to czekam az sie pojawi albo culler skonczy prace
> i zwracam nowy obiekt ktory sie pojawil albo null
>
> node *culler::GetFirstNode(void){
> while (items==NULL) {
> if (culling_in_progress==0) return NULL;
Sleep(0); // zeby wymusic uspienie tego a obudzic culling (lub cos tam
innego)
ale i tak generujesz sobie waiting condition
bo jak z innego watku wywolujesz GetFirstNode(...)
to tamten czeka i czeka, i czeka na wynik i zrzera czekaniem czas procka
ciagle sprawdzajac warunek we while'u
> }
> temp_node=items;
> return temp_node;
> }
>
> tu pobieram kolejny obiekt podobnie synchronizujac z cullerem
>
> node *culler::GetNextNode(void) {
> while (temp_node->next==NULL) {
> if (culling_in_progress==0) return NULL;
Sleep(0);
> }
> temp_node=temp_node->next;
> return temp_node;
> }
>
>
> no i kicha polega na tym ze jak miedzy odpaleniem watku a pobraniem
> pierwszego obiektu wyniku mija dlugi czas jest ok
> ale jak chce to robic w pelni rownolegle to efekt jest taki jakby culler
> skonczyl prace a na liscie nic nie bylo.
>
> moze ktorys pomoc??
na pierwszy rzut oka wyglada oki, poza tym wspomnianym waiting condition
moze kompilator chce zabardzo pooptymalizowac ? daj
volatile bool culling_in_progress; jesli jeszcze nie masz
--
MX
Technical Details
Message-ID:
<d2gqvi$aeu$1@nemesis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<962A8E53Ebikikillerradomnet@193.110.122.97>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!news.tpi.pl!not-for-mail From: "mx" <spam@spam.org> Newsgroups: pl.comp.demoscena Subject: Re: synchro watkow na wingrozie Date: Thu, 31 Mar 2005 14:33:16 +0200 Organization: tp.internet - http://www.tpi.pl/ Lines: 84 Message-ID: <d2gqvi$aeu$1@nemesis.news.tpi.pl> References: <962A8E53Ebikikillerradomnet@193.110.122.97> NNTP-Posting-Host: krakow.realitypump.pl X-Trace: nemesis.news.tpi.pl 1112272690 10718 62.181.185.228 (31 Mar 2005 12:38:10 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Thu, 31 Mar 2005 12:38:10 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2149 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2149 X-RFC2646: Format=Flowed; Original MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit