我有一个函数,它产生各种类型的线程,其中一种线程类型需要每隔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