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可以做到这一点。但是,这相当复杂且缓慢(它只是复制整个内存)。因此,更好的方法可能是将代码移出一个额外的助手应用程序,然后在子进程中执行。或者按照建议使用特殊的命令行参数启动同一个应用程序。