我正在尝试运行以下代码:
ArrayList<String> data = (ArrayList<String>) getIntent().getParcelableExtra("dataList");
我期待它打印&#34; 3秒钟&#34;每3秒后,但它不会显示该消息。 我尝试使用gdb调试它,但似乎没有任何错误,仍然没有输出。 在尝试调试时,我添加了一个printf语句,并且可以看到输出。
如果我在删除// printf后运行程序(&#34;%d \ n&#34;,ms-oldms);声明,没有再输出。我不确定发生了什么以及它是否依赖任何东西。
$ gcc --version gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2
答案 0 :(得分:10)
输出缓冲是原因。
当连接到终端设备时, stdout
默认为线路缓冲。您可以使用fflush(stdout);
或使用\n
中的printf()
即printf("3 seconds up\n");
来清除此信息。
或使用setbuf(stdout, 0);
I / O通常很慢。所以实现使用固定大小的缓冲区和printf一旦它满了。
实际上,过于频繁地调用fflush(stdout);
会影响性能。
答案 1 :(得分:1)
发布的代码有几个问题
oldms
未设置为任何特定值fflush(stdout);
或尾随换行符('\ n'),将不会输出任何内容(很长一段时间,直到系统stdout缓冲区被填充)only one statement per line and (at most) one variable declaration per statement
应用于代码以下代码干净地编译并执行所需的操作
#include <sys/time.h>
#include <stdio.h>
int main()
{
unsigned int ms;
unsigned int oldms = 0;
unsigned int dif;
struct timeval tv;
gettimeofday(&tv, NULL);
oldms = tv.tv_sec;
while(1)
{
gettimeofday(&tv, NULL);
ms=tv.tv_sec;
//printf("%d\n",ms-oldms );
dif=ms-oldms;
if(dif>3)
{
printf("3 seconds up\n");
oldms=ms;
}
}
} // end function: main