【问题标题】:How do you increment a count while using the sleep function?使用 sleep 功能时如何增加计数?
【发布时间】:2012-05-06 22:08:03
【问题描述】:

大家好,我好像迷路了。我应该能够在无限循环内增加一个孩子的计数,并在每次父母发送信号时打印计数,这应该是每 1 秒。我写了我的代码,但我认为使用 fork 后,子进程和父进程同时运行,但事实并非如此,所以我不确定如何解决这个问题。任何帮助都会很棒

【问题讨论】:

  • 我写了我的代码...给我们看看。

标签: c signals sleep


【解决方案1】:

你所描述的应该在理论上可行。

编写并行代码可能很棘手,尤其是使用fork(),如果您不熟悉该过程的话。

这是我的建议:在整个代码中添加一堆调试打印,例如:

int pid = fork();
if(pid == -1) {
    printf("Fork failed!\n");
} else if (pid) {
    printf("I'm the parent!\n");
    // Do stuff
    printf("Parent exiting\n");
    exit(0);
} else {
    printf("I'm the child!\n");
    // Do stuff
    printf("Child exiting\n");
    exit(0);
}

然后您可以查看您的程序是否按照应有的方式运行。

还要在信号处理程序中添加printf() 语句,以便确保它被调用。

【讨论】:

  • 非常感谢,我想向您展示我的代码,您能告诉我您是如何发送该代码以便它可以保持这种形式的吗?当我复制并粘贴我的代码时,它在我发送后会聚在一起
【解决方案2】:

子进程应该能够运行@987654321@,并让父进程发送SIGALRM 来唤醒它。也许你让孩子坐在busy loop 中,消耗了太多的 CPU 以至于父母没有按预期运行。

当然,如果你展示你的代码,这些问题的答案会更好。

【讨论】:

  • 我正在尝试粘贴我的代码,但它并没有保持我粘贴的形式。在我粘贴我的代码之前我需要做些什么特别的事情吗?顺便说一句,我是提出这个问题的人。
  • @user1357998 不确定,可能是问题长度和您帐户的相对新颖性存在问题。您可以尝试使用 pastebin 或其他类似站点进行临时存储,并希望有人对其进行编辑,当然前提是它不会太长。你的名字就在那里,无论是在你的评论上还是在你的问题上。 :)
猜你喜欢
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2012-01-14
相关资源
最近更新 更多