crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Как на создавать потоков по количеству ядер, а потом завершить их?
RazrFalcon
  опции профиля:
сообщение 5.11.2011, 16:33
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Циклично создаются потоки:
for (int i = 0; i < list.count(); ++i) {
    MyThread *myTh = new MyThread();
    QThread *th = new QThread(this);
    connect(cleanerM,SIGNAL(done()),this,SLOT(cleaningFinished()));
    myTh->moveToThread(th);
    th->start();
}

Затем на cleaningFinished я вызываю:
QThread *th = qobject_cast<QThread *>(sender());
th->quit();

Это нормальное решение или есть более правильное?


И как можно завершить все потоки? ака кнопка "стоп".

Сообщение отредактировал RazrFalcon - 5.11.2011, 16:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
RazrFalcon
  опции профиля:
сообщение 5.11.2011, 18:38
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Пока что остановился на таком варианте:
for (int i = 0; i < list.count(); ++i) {
    MyThread *myTh = new MyThread();
    QThread *th = new QThread(this);
    connect(myTh,SIGNAL(done()),th,SLOT(quit()));
    connect(th,SIGNAL(finished()),this,SLOT(workFinished()));
    myTh->moveToThread(th);
    th->start();
}
и
void MainWindow::workFinished()
{
    QThread *th = qobject_cast<QThread *>(sender());
    if (th)
        delete th;

    QList<QThread *> list = findChildren<QThread *>();
    if (list.isEmpty())
        qDebug()<<"all thread finished";
}


Нормальное решение? Вроде пашет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 11.3.2025, 12:00