我正在做一个学校的工作,我需要实现多个fork并显示当计算机在QT中创建和删除子进程时,好吧我正在用QThread执行此操作并且线程向我的MainWindow发送信号图像上升,但QT只是发送父亲的信号,问题是什么?
void MyThread::run() {
time_t tempo_real;
tempo_real = time( (time_t *) 0);
cout << "Pai criado com PID: " << getpid() << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(0);
this->sleep(14);
pid_t filhoUm;
filhoUm = fork();
switch(filhoUm) {
case -1:
terminate();
break;
case 0:
cout << "Filho 1 criado com PID: " << getpid() << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(1);
this->sleep(12);
pid_t netoUm;
netoUm = fork();
switch(netoUm) {
case -1:
terminate();
break;
case 0:
cout << "Neto 1 criado com PID: " << getpid() << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(3);
this->sleep(12);
cout << "Neto 1 is dead com PAI: " << getppid() << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(8);
terminate();
break;
default:
break;
}
this->sleep(18);
cout << "Filho 1 is dead!" << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(6);
terminate();
break;
default:
this->sleep(2);
pid_t filhoDois;
filhoDois = fork();
switch(filhoDois) {
case -1:
terminate();
break;
case 0:
cout << "Filho 2 criado com PID: " << getpid() << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(2);
this->sleep(14);
pid_t netoDois;
netoDois = fork();
switch(netoDois) {
case -1:
terminate();
break;
case 0:
cout << "Neto 2 criado com PID: " << getpid() << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(4);
this->sleep(18);
cout << "Neto 2 is dead com PAI: " << getppid() << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(9);
terminate();
break;
default:
break;
}
this->sleep(16);
cout << "Filho 2 is dead!" << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(7);
terminate();
break;
default:
break;
}
this->sleep(44);
cout << "Pai is dead!" << " Em: " << time( (time_t *) 0) - tempo_real << "segundos." << endl;
emit adicionar(5);
break;
}
}