在Qt4应用程序中“fork()”的便携方式?

时间:2009-06-08 21:33:45

标签: c++ qt qt4 fork

说,我需要运行一堆容易崩溃的代码,所以我需要在不同的进程上运行它。通常我会这样做:

  pid = fork();
  if (pid == -1) {
    std::cout << "Cant Spawn New Thread";
    exit(0);
  } else if (pid == 0) {
    std::cout << "Im a child that will crash\n";
    char *foo = (char *) 0xffff;
    std::cout << foo;
    exit(0);
  } else {
    std::cout << "PID:  " << pid << "\n";
  }
  do {
    std::cout << "Waiting for " << pid << "  to finish .. \n";
    pid_w = waitpid(pid,&status,0);
  } while (pid_w == -1);

显然我可以在我的Qt4应用程序中使用fork,但我想知道是否可以使用Qt4提供的任何内容或任何可移植的方式存档相同的功能而无需使用一堆架构#ifdefs

无论如何,我的目标是此应用仅实现pthread,但我仍然希望尽可能地保持与“本机”Qt API的接近。

我已经测试了QThread,并且线程中的segfaulting显然崩溃了整个应用程序,似乎QProcess仅针对产生完全不同的可执行文件时使用。还有其他选择吗?

4 个答案:

答案 0 :(得分:7)

Windows flat-out没有任何公共消费方式的fork(),因此没有Qt调用来模拟它;你需要做一些事情,比如开始使用特殊的命令行参数或其他东西。

答案 1 :(得分:3)

我认为你应该使用QtConcurrent,因为它是Qt中提供的最高级别的多线程编程API。这样你的代码就会更简单,更清晰 由于这是一个高级API,它可能是在你已经尝试过的低级API上实现的,所以这可能无法解决你的问题。

答案 2 :(得分:1)

您是否尝试过尝试...捕获语句&amp;弄清楚如何避免崩溃????

答案 3 :(得分:0)

您也可以尝试QThread。它比较旧,并且可能不如QtConcurrent便利。它不会自动调整CPU上的核心数,因此不会均匀分配工作负载。尽管如此,它可能是与fork()最接近的Qt模拟器,虽然它不是替代品,但可能对你更好。 QThread和QtConcurrent都可以跨平台移植。