Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
1

Многопоточность

01.03.2014, 02:36. Показов 2384. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Прокомментируйте пожалуйста данный код по использованию потоков.
В чем его минусы? Какие могут быть проблемы?
З.Ы. Объектам необходимо выполнять задачи параллельно, общение между объектами разных потоков выполняется с помощью сигналов и слотов описанных в main.
Данный код представляет собой простой пример построения текущей многопоточной программы:
main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
#include <QCoreApplication>
#include <qwe.h>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    qwe * q;
    q = new qwe();
 
    return a.exec();
}
qwe.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef QWE_H
#define QWE_H
 
#include <QObject>
#include <QDebug>
#include <QThread>
 
class qwe : public QObject
{
    Q_OBJECT
public:
    explicit qwe(QObject *parent = 0);
    QThread * th;
    
public slots:
    void start();
 
};
 
#endif // QWE_H
qwe.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "qwe.h"
 
qwe::qwe(QObject *parent) :
    QObject(parent)
{
    th = new QThread();
 
    QObject::connect( th, SIGNAL( started() ), this, SLOT( start() ) );
 
    this->moveToThread( this->th );
 
    th->start();
 
}
 
void qwe::start()
{
    qDebug () << "It's work!";
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2014, 02:36
Ответы с готовыми решениями:

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

многопоточность в Qt
над qt первый день копчу, гуру подскажите как многопоточность здесь реализуется, omp или boost не...

Многопоточность
Написал приложение для работы с видео. Это приложение использует open source библиотеки OpenCV и...

Многопоточность
Здравствуйте! Хотелось бы, чтобы кто-то помог с разработкой многопоточной прожки. Дело в том, что...

9
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
01.03.2014, 05:29 2
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
Какие могут быть проблемы?
Если не ошибаюсь, проблема будет одна, с вашим кодом: при закрытии программы поток не будет останавливаться
0
Заблокирован
01.03.2014, 12:36 3
Цитата Сообщение от Flassie Посмотреть сообщение
Если не ошибаюсь, проблема будет одна, с вашим кодом: при закрытии программы поток не будет останавливаться
Так бывает? ^^
Цитата Сообщение от xNeKiToSx Посмотреть сообщение
В чем его минусы? Какие могут быть проблемы?
В конкретно этом коде я "минусов" не вижу. Иными словами.

C++ (Qt)
1
int main() { cout << "hello"; }
"Данный код представляет собой простой пример построения текущей многопоточной программы."
В чем его минусы?

Про то, как "правильно" готовить потоки в кьют, на хабре есть хорошая статья (а еще лучше коменты к ней)
0
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
01.03.2014, 13:42 4
Цитата Сообщение от rrrFer Посмотреть сообщение
Так бывает? ^^

Не по теме:

Да. Попробуйте вынести в отдельный поток бесконечный цикл/таймер или что-то в этом роде и закрыть программу


Единственный вопрос: может стоить выносить не самого себя, а кого-то в отдельный поток?
0
rrrFer
01.03.2014, 14:00
  #5

Не по теме:

Цитата Сообщение от Flassie Посмотреть сообщение
Да. Попробуйте вынести в отдельный поток бесконечный цикл/таймер или что-то в этом роде и закрыть программу
Сами пробовали перед тем, как советовать?

0
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
01.03.2014, 23:16 6
Цитата Сообщение от rrrFer Посмотреть сообщение
Сами пробовали перед тем, как советовать?

Не по теме:

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


Бесконечный цикл/таймер даже необязательны для того, что бы вылетали ошибки подобного вида:
QThread: Destroyed while thread is still running

Это конструктор:
C++ (Qt)
1
2
3
4
thread = new QThread(this);
test = new Test();
test->moveToThread(thread);
thread->start();
Test - класс-пустышка. В нем ничего нету кроме пустого конструктора. Он наследник QObject'a
0
Заблокирован
02.03.2014, 08:50 7
Цитата Сообщение от rrrFer Посмотреть сообщение
Если не ошибаюсь, проблема будет одна, с вашим кодом: при закрытии программы поток не будет останавливаться
Если считаешь, что может - приведи пример программы, после закрытия которой в ps (или предложи как я могу увидеть невозможное) останутся потоки этой программы.
0
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
02.03.2014, 21:23 8
Цитата Сообщение от rrrFer Посмотреть сообщение
Если считаешь, что может - приведи пример программы, после закрытия которой в ps (или предложи как я могу увидеть невозможное) останутся потоки этой программы.

Не по теме:

Я говорю, что Qt выводит сообщение об ошибке. Перевод ошибки, по всей видимости, требуется было написать:
QThread: Destroyed while thread is still running
перевод:
QThread: Разрушено, пока поток еще работает
Я надеюсь не надо разъяснять смысл данных слов?

0
Заблокирован
02.03.2014, 21:36 9
Цитата Сообщение от Flassie Посмотреть сообщение
Перевод ошибки, по всей видимости, требуется было написать:
Требуется было показать что "при закрытии программы поток не останавливается".
А то, что там кьют какое-то сообщение выводит - дак надо либо wait вызвать, либо слот quit дернуть (но к коду из темы это не имеет отношения, это нужно не всегда - ну остановится какой-нибудь поток таймера аварийно, и что? Пример ТС вообще в вакууме - не понятно тут чего хочет ТС, додумывать не стоит).

Добавлено через 37 секунд
Цитата Сообщение от Flassie Посмотреть сообщение
Я говорю, что Qt выводит сообщение об ошибке
Напомню, ты говоришь это:
Цитата Сообщение от Flassie Посмотреть сообщение
При закрытии программы поток не будет останавливаться
0
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
02.03.2014, 21:52 10
Цитата Сообщение от rrrFer Посмотреть сообщение
ну остановится какой-нибудь поток таймера аварийно, и что?
Ну если ошибки выскакивают - это что-то значит. Если ничего от этого не будет - то зачем ошибки выводить?

Добавлено через 1 минуту
Цитата Сообщение от rrrFer Посмотреть сообщение
Напомню, ты говоришь это
Окей. Прошу прощения. Будет выводить ошибку и не будет завершаться корректно
0
02.03.2014, 21:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2014, 21:52
Помогаю со студенческими работами здесь

Многопоточность в Qt
Привет всем, возникла проблема по работе с потоками: Есть отдельный класс (запускаемый в отдельном...

Qt, libfcgi и многопоточность
Привет Всем. Прочитал в одной статье &quot;Блокирования событий при использовании libfcgi в...

Многопоточность и network
Всем привет! Я сейчас пытаюсь написать программу для сбора сведений о торрентах, т.е. написать...

QTimer и многопоточность
К серверу подключаются несколько клиентов и начинают передавать данные. Данные с каждого клиента на...

Многопоточность и GUI
День добрый. Подскажите, пожалуйста, как решить такую проблему: Сейчас у нас в проекте есть...

QSQLITE и многопоточность
Добрый день! Возможно вопрос немного не в той секции форума, заранее извиняюсь. Программа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru