Как распараллелить потоки
Есть ещё один небольшой вопрос касательно потоков 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));
}
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)"
"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)"
Кто-нибудь может подсказать, с чем это связано, и как сделать так, чтобы потоки выполнялись параллельно?
В случае, если удастся этого добиться, нужно будет реализовать мутексы.
Но пока нужно понять, почему они выполняются последовательно
Буду благодарен за любые ответы.
где реализация run() метода для потока?
Сам накосячил. Тема закрыта :)