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