Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2011, 13:33   #1
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
Восклицание Как распараллелить потоки

Всем привет!

Есть ещё один небольшой вопрос касательно потоков 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 вне форума Ответить с цитированием
Старый 08.09.2011, 13:58   #2
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

Всё, приношу извенения.
Сам накосячил. Тема закрыта
не ржите)
Lindemann66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки _-Re@l-_ Общие вопросы Delphi 6 18.01.2011 20:45
Как красиво сделать шифрование через потоки? TwiX Общие вопросы C/C++ 0 16.12.2010 14:37
Потоки С++ Aleksin Помощь студентам 1 07.11.2010 18:15
Потоки - Как сделать чтоб не предок ждал пока наследники подсчитают, а один наследник ждал другого? SkrudjMakdak Общие вопросы Delphi 7 22.09.2010 09:03