Comments 7
А у вас действительно RBWorker обрабатывает stop до того как закончит построение отчёта?
Вы же внутри сигнала запускаете обработку, тем самым вы останавливаете EventLoop и следующий сигнал будет доставлен уже после окончания обработки отчёта.
Я бы предположил что построение одного отчёта — задача достаточно быстрая (в то время как построение 5000 — нет), а значит можно не отменять построение отчёта а давать ему закончить.
В таком случае удобнее использовать QtConcurent (filter или map по вкусу) — он сам справится и с запуском потоков и с агрегацией выходных данных. Отменить обработку тоже можно, да и удобный индикатор выполнения — тоже большой плюс.
Вы же внутри сигнала запускаете обработку, тем самым вы останавливаете EventLoop и следующий сигнал будет доставлен уже после окончания обработки отчёта.
Я бы предположил что построение одного отчёта — задача достаточно быстрая (в то время как построение 5000 — нет), а значит можно не отменять построение отчёта а давать ему закончить.
В таком случае удобнее использовать QtConcurent (filter или map по вкусу) — он сам справится и с запуском потоков и с агрегацией выходных данных. Отменить обработку тоже можно, да и удобный индикатор выполнения — тоже большой плюс.
+3
Стоит еще добавить, что не стоит создавать кучу потоков — какой смысл их генерить 5 тысяч штук, если ядра всего 2-4? Да и жрут они довольно много при создании/смерти, гораздо лучше использовать QThreadPool, в котором хранится оптимальное количество потоков, а задачи поступают по очереди.
К слову, QtConcurrent это делает автоматически
К слову, QtConcurrent это делает автоматически
+2
Я просто оставлю эту ссылку здесь: Threads, Events and QObjects
И насколько я помню, на хабре есть русский перевод, по-моему переводил пользователь surik.
И насколько я помню, на хабре есть русский перевод, по-моему переводил пользователь surik.
+4
Если следовать данному подходу, почему бы тогда не воспользоваться пулом потоков?
qt-project.org/doc/qt-4.8/qthreadpool.html
либо если пойти в абстракции еще дальше то qt-project.org/doc/qt-4.8/qtconcurrentrun.html#run
qt-project.org/doc/qt-4.8/qthreadpool.html
либо если пойти в абстракции еще дальше то qt-project.org/doc/qt-4.8/qtconcurrentrun.html#run
+2
Забавно, но не рекламы ради, посмотрите на дату моего поста. Не стал сюда писать из-за того, что особо описывать то и нечего :-).
+1
Sign up to leave a comment.
Articles
Change theme settings
Правильное использование QThread