Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Как распараллелить потоки


Автор: Lindemann66 8.9.2011, 12:33
Всем привет!

Есть ещё один небольшой вопрос касательно потоков QThread
Есть код
Код

#include "Classes.h"

void Event::Show(QString str) {
    qDebug() << str;
}

MainThread::MainThread() {
    m_event = new Event();
}

MainThread::~MainThread() {
    delete m_event;
    for (int i = 0; i < 3; i++) {
        delete threads[i];
    }
}

void MainThread::Run() {
    for (int i = 0; i < 3; i++) {
        ChildThread *child = new ChildThread(i + 1);
        child->setNumber(i + 1);
        child->setEvent(m_event);
        threads.push_back(child);
        child->start();
    }
}

ChildThread::ChildThread(int timer, QObject *parent) : QThread(parent) {
    startTimer(timer * 1000);
}

void ChildThread::setNumber(uint number) {
    m_number = number;
}

void ChildThread::setEvent(Event *event) {
    m_event = event;
}

void ChildThread::timerEvent(QTimerEvent *event) {
    //m_number++;
    m_event->Show(QString("Run from %1 thread (1)").arg(m_number));

    sleep(m_number * 2);

    m_event->Show(QString("Run from %1 thread(2)").arg(m_number));

    sleep(m_number * 2);

    m_event->Show(QString("Run from %1 thread(3)").arg(m_number));

    sleep(m_number * 2);

    m_event->Show(QString("Run from %1 thread(4)").arg(m_number));
}


В данном примере создаётся 3 потока, и в каждом выполняются определённые действия

Потоки выполняют действия через определённый таймер, РАЗЛИЧНЫЙ для каждого потока
(здесь - раз в секунду, в две и в три)

Вопрос
Почему-то, потоки выполняются строго последовательно, то есть в Application Output всё время
Цитата
Debugging starts
"Run from 1 thread (1)" 
"Run from 1 thread(2)" 
"Run from 1 thread(3)" 
"Run from 1 thread(4)" 
"Run from 2 thread (1)" 
"Run from 2 thread(2)" 
"Run from 2 thread(3)" 
"Run from 2 thread(4)" 
"Run from 3 thread (1)" 
"Run from 3 thread(2)" 
"Run from 3 thread(3)" 
"Run from 3 thread(4)" 
"Run from 1 thread (1)" 
"Run from 1 thread(2)" 
"Run from 1 thread(3)" 
"Run from 1 thread(4)"


Кто-нибудь может подсказать, с чем это связано, и как сделать так, чтобы потоки выполнялись параллельно?

В случае, если удастся этого добиться, нужно будет реализовать мутексы.
Но пока нужно понять, почему они выполняются последовательно

Буду благодарен за любые ответы.

Автор: Lindemann66 8.9.2011, 12:58
Всё, приношу извенения.
Сам накосячил. Тема закрыта smile
Не ржите  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)