Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “便携式方式”;fork();在Qt4应用程序中?_C++_Qt_Qt4_Fork - Fatal编程技术网

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

C++ “便携式方式”;fork();在Qt4应用程序中?,c++,qt,qt4,fork,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 *) 0xfff

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

  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);
pid=fork();
如果(pid==-1){

std::cout您是否尝试过使用catch语句并找出如何避免崩溃???

我认为您应该使用它,因为它是Qt中最高级的多线程编程API。这样您的代码将更加简单和干净。

由于这是一个高级API,它可能是在您已经尝试过的较低级别API之上实现的,因此这可能无法解决您的问题。

Windows平板电脑没有fork()以任何可公开使用的方式,因此没有Qt调用来模拟它;您需要做一些事情,例如使用特殊的命令行参数或其他东西启动自己。

您也可以尝试。它比QtConcurrent更旧,可能不如QtConcurrent方便。它不会自动调整CPU上的内核数,因此不会分发尽管如此,它可能是最接近fork()的Qt模拟,虽然它不是一个现成的替代品,并且可能对您更好。QThread和QtConcurrent都是跨平台移植的。

抱歉,但这不是一个选项,崩溃的代码应该在它想崩溃的时候崩溃,我的应用程序应该抓住它,继续运行而不会崩溃。尝试捕获AVs并吞下它它们是一个巨大的安全漏洞。你知道有一个Qt论坛吗?你也可以在irc.freenode.net上的#Qt频道上提问,以防你在这里没有得到答案。我曾尝试从Qtcenter的wiki中搜索可能的例子,但没有找到任何,我今天晚些时候会在#Qt上访问,可能=)注意,有一种方法可以模仿
fork()
在Windows上。Cygwin可以做到这一点。但是,这相当复杂且缓慢(它只是复制整个内存)。因此,更好的方法可能是将代码移出一个额外的助手应用程序,然后在子进程中执行。或者按照建议使用特殊的命令行参数启动同一个应用程序。