Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6475
Последний выпуск: 19.06.2015

Как распараллелить потоки

5.6K
08 сентября 2011 года
Lindemann66
193 / / 21.07.2011
Всем привет!

Есть ещё один небольшой вопрос касательно потоков 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;
    }
}

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)"



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

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

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

11
08 сентября 2011 года
oxotnik333
2.9K / / 03.08.2007
какой то псевдокод.... 3 раза прочитал и не понял ничего..
где реализация run() метода для потока?
5.6K
08 сентября 2011 года
Lindemann66
193 / / 21.07.2011
Всё, приношу извенения.
Сам накосячил. Тема закрыта :)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог