Dovolím si předvést funkci v odděleném vlákně, používám tam sleep, protože sleep 1000 je proste 1 sekunda, nemusím tahat čas z nějaký časový funkce, která si cucá data z prstu :D:
unsigned int __stdcall MultiplayerMgr::NewRoundIn5( void * param )
{
for(int counter=0;counter<6;counter++)
{
if(CancelCD)//externi bool, pokud admin prepnul na dalsi mapu v poradi, prerusi se odpocet a zacne znovu az dojde na 7 sekund casovac do dalsi mapy
{
LTVector vPos(0.0f, 0.0f, 0.0f);
g_pServerSoundMgr->PlaySoundFromPos(vPos, "Sounds\Interface\evac_cancel.wav", 100000.0f, SOUNDPRIORITY_MISC_HIGH);
break; //break ukonci for a prejde rovnou k terminaci vlakna _endthreadex
}
//funkce posilajici lokalni zvuk hraci, to nahrad vystupem treba do konsole s counter==0 je 5 sekund, counter==1 jsou 4 sekundy, counter==2 jsou 3 sekundy...
HMESSAGEWRITE hMessage = g_pLTServer->StartMessage(LTNULL, MID_MPMGR_LOCAL_SOUND);//telo zpravy
if(counter==0)
hMessage->WriteString(szAnnouncer[12]);//New round in...
if(counter==1)
hMessage->WriteString(szAnnouncer[13]);//five
if(counter==2)
hMessage->WriteString(szAnnouncer[14]);//four
if(counter==3)
hMessage->WriteString(szAnnouncer[15]);//three
if(counter==4)
hMessage->WriteString(szAnnouncer[16]);//two
if(counter==5)
hMessage->WriteString(szAnnouncer[17]);//one
hMessage->WriteByte(SOUNDPRIORITY_MAX);//priorita
g_pLTServer->WriteToMessageByte(hMessage, 100);//hlasitost
g_pLTServer->EndMessage(hMessage);//a jedeeem!
if(counter==0)
Sleep(2000);//prvni zvuk ma dve sekundy, kazdy dalsi uz jen sekundu
else
Sleep(1000);
}
_endthreadex(0); //zabijeme vlakno, aby nam nestrasilo v pameti
return true; //nepouziva se, ale praveke visual studio to tu vyzaduje, po endthreadex se vlakno i tahle fce ukonci
}
Voláme pomocí
_beginthreadex( 0,0, &NewRoundIn5, this, 0, 0 );
To, že to maká v odděleném vláknu znamená, že "Sleep()" nezapauzuje celou tu aplikaci, ale pouze to danné vlákno.