【发布时间】:2011-11-14 21:28:44
【问题描述】:
有时 c++ 很重要。我真的想不出为什么这行不通,如果你们中的任何人知道,我会很高兴。
我在一个线程上每秒调用一次这个函数。
此代码有效(打印正在迭代的列表中的内容):
void DeltaList::print()
{
pthread_mutex_lock (&mutex);
printf("\n");
list<Delta*>::iterator it;
for(it=deltas.begin(); it!=deltas.end(); it++)
{
printf("%d ", (int) (*it)->timeleft);
}
pthread_mutex_unlock (&mutex);
}
这个没有(没有打印):
void DeltaList::print()
{
pthread_mutex_lock (&mutex);
//printf("\n");
list<Delta*>::iterator it;
for(it=deltas.begin(); it!=deltas.end(); it++)
{
printf("%d ", (int) (*it)->timeleft);
}
pthread_mutex_unlock (&mutex);
}
所以...?
【问题讨论】:
-
WORKS = 真正打印列表中的内容。 DOESN'T WORK = 什么都不做,什么也不打印。 printf 是我更改的代码的唯一部分。这对我来说太合乎逻辑了,我忘了提出这个问题,现在编辑它。
-
它会永远阻塞吗?即它是否会离开该功能?
-
printf("\n") 强制刷新输出缓冲区。可能发生的情况是它正在打印到内部缓冲区,而您的打印量不足以强制它刷新。等待一段时间以填充缓冲区或强制刷新。
-
洛基是正确的。输出被缓冲,直到你打印足够的缓冲区来填充和刷新,如果没有明确地使用
\n或调用fflush(),你将看不到它。