🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.demoscena
Article #32947

Re: synchro watkow na wingrozie

#32947
From: mx
Date: Thu, 31 Mar 2005 12:33
82 lines
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-mail
References: <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