带fork()的QThread不发出信号

时间:2014-02-20 21:17:50

标签: multithreading qt fork qthread

我正在做一个学校的工作,我需要实现多个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;
    }
}

0 个答案:

没有答案