Printf不按程序顺序执行

时间:2016-11-21 03:02:20

标签: c printing

下面是一些简单的代码;请注意,在呼叫printf之前,有一个waitFor()声明。为什么程序会暂停三秒钟而然后打印消息?

int main(int argc, char* argv)
{
    producer();

    return 0;
}

void waitFor(unsigned int secs) {
    unsigned int retTime = time(0) + secs;   // Get finishing time.
    while (time(0) < retTime);               // Loop until it arrives.
}

static void *producer()
{
    int s = 3;
    printf("Busy for %d seconds", s);
    waitFor(s);
    return NULL;
}

2 个答案:

答案 0 :(得分:1)

这可能是因为在旋转等待CPU之前你没有让输出刷新。

你的waitFor例程不是真正的正确方法。看一下使用sleep()

在我的Mac上,如果我在邮件中添加换行符,则会立即输出而无需刷新。

    printf("Busy for %d seconds\n", s);

答案 1 :(得分:1)

你是如何运行这个程序的?有时printf()的输出是缓冲的,只有在打印大量数据或程序退出时才会出现。解决它的两种简单方法是:

  • 使用stderr:import sys; import os; import socket ucf='/opt/userconfig.sec' ukf='/opt/userkey.sec' host = socket.gethostname() port = '9556' domain_name = 'WLS_Domain' domain_dir = '/opt/domains/WLS_Domain' nm_type = 'SSL' def status(): try: nmConnect(userConfigFile=ucf,userKeyFile=ukf,host=host,port=port,domainName=domain_name,domainDir=domain_dir,nmType=nm_type) server_state = nmServerStatus('AdminServer') print 'AdminServer is in state: ' + server_state - &gt; printf(
  • 使用后冲洗:在printf
  • 之后致电fprintf(stderr,