crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

RazrFalcon
  опции профиля:
сообщение 30.8.2011, 19:24
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  



thread = new QThread(this);
for (int p = 0; p < 3; ++p) {
  prc = new Processor(); // Processor класс-наследник qobject. В конструкторе запускает QProcess.
  prc->moveToThread(thread);
}
thread->start();
В итоге у меня запускается три Processor одновременно. А как сделать, что бы они стратовали по очереди? То есть, у меня есть отдельный поток, и в нем я запускаю обработку (что бы GUI не зависал). При том что новая обработка должна начинается сразу после окончания старой. А у меня как бы паралельно все работают.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ssoft
  опции профиля:
сообщение 1.9.2011, 13:58
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Вот так работает. Быстрый набросок.

main.cpp
#include <QCoreApplication>
#include <QDir>
#include "ProcessManager.h"

int main ( int narg, char ** varg )
{
    QCoreApplication app( narg, varg );
    ProcessManager manager;
    app.connect( &manager, SIGNAL( finished() ), SLOT( quit() ), Qt::QueuedConnection );

    manager.append( QDir::currentPath() + "/test.bat" );
    manager.append( QDir::currentPath() + "/test.bat" );
    manager.append( QDir::currentPath() + "/test.bat" );
    manager.start();

    return app.exec();
}


ProcessManager.h

#ifndef PROCESSMANAGER_H
#define PROCESSMANAGER_H

#include <QObject>
#include <QProcess>

class ProcessManager : public QObject
{
    Q_OBJECT
private:
    QStringList proc_files;
    QProcess * process;
    int current_proc;

public:
    explicit ProcessManager ( QObject *parent = 0 );

    void append ( const QString & proc_file );
    void start ();

public slots:
    void nextProccess ();
    void onError ();

signals:
    void finished ();
};

#endif // PROCESSMANAGER_H


ProcessManager.cpp

#include <QDebug>
#include "ProcessManager.h"

ProcessManager::ProcessManager(QObject *parent)
    : QObject(parent)
    , process( new QProcess( this ) )
    , current_proc()
{
    connect( process, SIGNAL( error( QProcess::ProcessError ) )
        , this, SLOT( onError() ) );
    connect( process, SIGNAL( finished ( int, QProcess::ExitStatus ) )
        , this, SLOT( nextProccess() ) );
}

void ProcessManager::append ( const QString & proc_file )
{
    proc_files.append( proc_file );
}

void ProcessManager::start ()
{
    current_proc = 0;
    nextProccess ();
}

void ProcessManager::nextProccess ()
{
    if ( current_proc < proc_files.count() )
        process->start( proc_files.at( current_proc++ ) );
    else
        emit finished();
}

void ProcessManager::onError ()
{
    qWarning() << "Process execute error";
    emit finished();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- RazrFalcon   Как правильно запустить несколько последовательных процессов?   30.8.2011, 19:24
- - Dovgon   Почитай про симафоры или мютаксы. По простому пере...   30.8.2011, 21:08
- - RazrFalcon   Эммм... как то слишком сложно. Может можно просто ...   30.8.2011, 22:14
- - RazrFalcon   up!   31.8.2011, 11:01
- - wiz29   а зачем в таком случае 3 процесса запускать? (если...   31.8.2011, 15:21
- - RazrFalcon   Перефразирую. Нужно запустить программу с разными ...   31.8.2011, 15:55
|- - MJIbIu   Цитата(RazrFalcon @ 31.8.2011, 16:55) Пер...   31.8.2011, 16:26
- - RazrFalcon   Ну сейчас так и происходит. Разве что: bool QProce...   31.8.2011, 16:37
- - ssoft   Вот так работает. Быстрый набросок. main.cpp #inc...   1.9.2011, 13:58
- - RazrFalcon   Оно то может и работает. Но у меня не консольное п...   1.9.2011, 14:27
|- - ssoft   Цитата(RazrFalcon @ 1.9.2011, 15:27) Оно ...   5.9.2011, 14:48
- - RazrFalcon   Ну у меня ваш код не заработал. Так что...   5.9.2011, 16:02
|- - ssoft   Цитата(RazrFalcon @ 5.9.2011, 17:02) Ну у...   7.9.2011, 13:06
- - RazrFalcon   ../test/program/main.cpp:2: error: con...   7.9.2011, 17:05
- - RazrFalcon   Вопрос все еще открыт.   11.9.2011, 22:30
|- - Sokoloff   Цитата(RazrFalcon @ 11.9.2011, 23:30) Воп...   12.9.2011, 11:33
- - RazrFalcon   Если вы про тот что я привел, то тут тоже не все г...   12.9.2011, 15:33
- - RazrFalcon   Up   22.9.2011, 16:29
- - RazrFalcon   Написал пример (в аттаче). Почему оно не работает?...   13.10.2011, 4:15
- - BRE   Ну так Qt в консоль тебе все пишет.   13.10.2011, 7:28
- - RazrFalcon   И что я должен исправить?!   13.10.2011, 7:38
|- - BRE   Цитата(RazrFalcon @ 13.10.2011, 8:38) И...   13.10.2011, 11:01
- - RazrFalcon   Огромное спасибо! Теперь пашет. И как я не мо...   13.10.2011, 13:16
- - PAFOS   ЦитатаРазве что: bool QProcess::waitForFinished ( ...   17.10.2011, 16:33


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 3.7.2025, 2:49