我有一个类指针列表。我有一个从这些指针调用方法的函数。列表中的每个指针都是主类的派生类。我现在所做的就是遍历列表并调用列表中第一个指针的方法,等待它完成,然后转到第二个类对象指针并调用该方法,依此类推。
现在我有大约20个派生类,完成这个列表需要花费很长时间。所以我想使用fork一次执行4-5个类方法,这样整个过程就快了很多。
list<Myclass *> check;
myfunc(list<Myclass *> check)
{
for(list<Myclass*>::iterator a= check.begin();a!=check.end();a++)
(*a)->run();
}这是我所拥有的东西的一个骨架。我想要的是每次它都会派生并创建一个子进程来执行命令,然后移动到下一个进程……
发布于 2011-06-21 20:08:20
是的,您可以使用fork()在子线程中执行一些工作。但是,一旦子进程完成了它的工作,它就会返回,并且您不会在它们之间共享数据。我不清楚你的实现,但是如果你的意图是派生一些进程来做一些额外的工作,那么这似乎是可以的,但你可能需要一个线程,而不是fork。
发布于 2011-06-21 20:03:45
您更可能希望启动一个线程,而不是派生一个进程。当涉及到指针时,这会更容易,因为指针可以在进程内共享,但不能在外部共享。
此外,派生进程会带来一些性能开销。
发布于 2011-06-21 20:10:00
不过,您并没有用fork传回任何内存。你可能需要一个线程。下面是如何做到这一点的:
int i = 0;
int n = 4; //or 5;
list<Myclass> check; // You can't use pointers here though, as the memory is not shared.
myfunc(list<Myclass> check)
{
for(list<Myclass>::iterator a= check.begin();a!=check.end();a++) {
if(i >= n) {
wait();
} else {
if(fork() == 0) {
a->run();
exit(0);
} else {
i++;
}
}
}
// Prevent a voodoo priest from making zombies of these processes.
while(i-->0) wait();
}https://stackoverflow.com/questions/6424874
复制相似问题