在Qt4应用程序中使用“fork()”的便携方式?
说,我需要运行一堆容易崩溃的代码,所以我需要在不同的进程上运行它。通常,我会做这样的:在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应用程序,但我不知道是否我可以存档与Qt4的提供的任何东西或任何可移植的方式,而不诉诸相同的功能有一堆建筑#ifdefs
?
无论如何,我的目标只有pthread
这个应用程序的实现,但我仍然想尽可能接近“本地”Qt API。
我测试过QThread
,并在线程显然段错误崩溃的整个应用程序,它似乎是QProcess
只管产卵完全不同的可执行文件时使用。任何其他的选择?
的Windows平板出没有在任何公开耗材方式fork()的,所以没有Qt的通话效仿;你需要做一些事情,比如用特殊的命令行参数或其他东西来开始。
您是否尝试过的try ... catch语句&搞清楚如何避免崩溃????
很抱歉,但它不是一个选项,即崩溃*如果想应该只是*崩溃的代码我的应用程序应该抓住这一点,并继续保持滴答作响而不会崩溃。 – rasjani 2009-06-08 21:49:13
我觉得你应该去QtConcurrent,因为它是最高层API在Qt的可用多线程编程。这样你的代码将变得更简单和更清晰。
由于这是一个高层次的API,这是对的底层API顶部可能实现的,你已经尝试过那么这也可能不会解决你的问题,但是。
你可以尝试QThread也。它比QtConcurrent更旧,可能不太方便。它不会自动调整CPU上的内核数量,因此不会平均分配工作负载。不过,它可能是最接近的fork()的Qt模拟器,尽管它不是一个简单的替代品,并且可能对您更好。 QThread和QtConcurrent都可以跨平台移植。
你知道Qt论坛在http://qtcentre.org吗?您也可以在irc.freenode.net上的#qt频道上提问,以防万一您在这里没有得到您的答案。 – 2009-06-08 23:56:06
我曾尝试从qtcentre的维基搜索可能的例子,但没有发现任何,我将#qt下降的今天晚些时候propably =) – rasjani 2009-06-09 06:29:24