我有一個函數,它產生各種類型的線程,其中一種線程類型需要每隔x秒產生一次。目前,我有這樣的:在函數中使用靜態變量vs從調用者傳遞變量
bool isTime(Time t)
{
return t >= now();
}
void spawner()
{
Time t = now();
while(1)
{
if(isTime(t))//is time is called in more than one place in the real function
{
//launchthread and recalculation of t only happens once in real function
launchthread()
t = now() + offset;
}
}
}
但我想將其更改爲的:
bool isTime()
{
static Time t = now();
if(t >= now())
{
t = now() + offset;
return true;
}
return false;
}
void spawner()
{
while(1)
{
if(isTime())
launchthread();
}
}
我認爲第二個方法是整潔,但我通常避免在靜態幾乎相同的方式我避免全球數據;任何人對不同的風格有任何想法?
第一種形式有一個錯誤。你應該在循環之外設置't'。此外,這兩種形式都使用一個繁忙的循環,這將完全捆綁CPU。 – 2010-06-03 10:28:29
修正了這個錯誤,這是簡化的僞代碼,而不是我實際上在做的事 – Patrick 2010-06-03 10:38:09
自我修正:第二個版本至多啓動一個線程,具體取決於第一次和第二次調用now()量子。它需要外部'while(1)...'循環來匹配第一個版本。但我認爲帕特里克的觀點只是僞碼。 – 2010-06-03 11:12:53