crossplatform.ru

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

> многопоточность QThread
eldar85
  опции профиля:
сообщение 12.4.2010, 13:56
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

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




Репутация:   0  


пробую написать простенькую многопоточную программку, но она выдает сообщение об ошибке

ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 22fe34. Receiver '' (of type 'QProgressBar') was created in thread 5d70b8", file kernel\qcoreapplication.cpp, line 347
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 22fe28. Receiver '' (of type 'QProgressBar') was created in thread 5d70b8", file kernel\qcoreapplication.cpp, line 347
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.

вот пример кода

#include <QApplication>
#include <QLabel>
#include <QtGui>

#include "thread.h"



int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
  
    QProgressBar *bar1 = new QProgressBar;
    QProgressBar *bar2 = new QProgressBar;
    
   MyThread thread1(bar1);
   MyThread thread2(bar2);
   thread1.start(QThread::NormalPriority);
   thread2.start(QThread::LowPriority);

    
bar1->show();
bar2->show();
    return app.exec();
}


thread.h

#ifndef THREAD_H
#define THREAD_H
#include <qapplication.h>
#include <qthread.h>
#include <qprogressbar.h>
#include <qgridlayout.h>
#include <qlabel.h>

// ======================================================================
class MyThread : public QThread {
    QProgressBar* m_pprb;

public:
    MyThread(QProgressBar* pprb) : QThread()
                                 , m_pprb(pprb)
    {
    }

    void run()
    {
        for(int i = 0; i <= 100000000; ++i) {
            m_pprb->setValue(i / 1000000);
        }
    }
};


#endif // THREAD_H


ну и про файл

SOURCES += main.cpp
CONFIG        += qt warn_on release thread
TARGET        = Threads
TEMPLATE    = app
HEADERS += thread.h


окно выскакивает с такой ошибкой:
this applicatoin has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

правда в книге вот эта строка
m_pprb->setValue(i / 1000000);

выглядела так:
m_pprb->setProgress(i / 1000000);

но setProgress не существует, похоже она была чем то заменена))

Сообщение отредактировал eldar85 - 12.4.2010, 14:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- eldar85   многопоточность QThread   12.4.2010, 13:56
- - eldar85   капец, разобрался почему не работает)))) у меня в ...   12.4.2010, 14:39
- - eldar85   хоть программа и работает, но все же примерно чере...   12.4.2010, 15:21
|- - fsMark   Цитата(eldar85 @ 12.4.2010, 16:21) хоть п...   12.4.2010, 15:55
- - eldar85   так в GUI не катит многопоточность??? а если второ...   12.4.2010, 17:10
- - Litkevich Yuriy   Цитата(eldar85 @ 12.4.2010, 21:10) так в ...   12.4.2010, 17:13
- - eldar85   спасибо) буду изучать и пробывать))   12.4.2010, 20:23
- - eldar85   мне вот интересно, а сколько потоков допустимо за ...   16.4.2010, 21:39
- - SABROG   Цитата(eldar85 @ 16.4.2010, 22:39) мне во...   16.4.2010, 21:56
|- - ufna   Цитата(SABROG @ 16.4.2010, 22:56) По коли...   18.4.2010, 11:27
- - eldar85   т.е. если у меня двух ядерник, то лучше всего не б...   18.4.2010, 2:10
|- - wiz29   Цитата(eldar85 @ 18.4.2010, 2:10) т.е. ес...   28.6.2010, 15:26
- - eldar85   мне бы нужно хотябы два-три потока сделать, но опя...   18.4.2010, 16:53
- - Litkevich Yuriy   Цитата(eldar85 @ 18.4.2010, 20:53) будет ...   18.4.2010, 17:11
- - ufna   да, именно так. Когда обработка идет "надо сд...   18.4.2010, 18:12
- - eldar85   понятно, спасибо)) я просто чем был удивлен, скач...   18.4.2010, 21:08
- - eldar85   здравствуйте, еще раз решил поднять тему многопото...   7.6.2010, 19:47
- - SABROG   thread.run(i); Нельзя так запускать поток...   8.6.2010, 15:19
- - eldar85   а как можно?) я вот сделал вот так сейчас void mai...   10.6.2010, 23:41
- - Litkevich Yuriy   eldar85, ты должен вызывать только Thread::start()...   11.6.2010, 0:40
- - eldar85   но мне нужно чтобы каждый поток работал с функцией...   11.6.2010, 1:16
- - Litkevich Yuriy   Цитата(eldar85 @ 11.6.2010, 5:16) //я же ...   11.6.2010, 6:51
- - eldar85   все равно что то не то получается... если я запуск...   11.6.2010, 9:33
- - eldar85   вообще ничего не пойму, как же мне хотябы 5 потоко...   11.6.2010, 11:14
- - SABROG   Тема больше для раздела "Qt Ввод/Вывод, Сеть....   11.6.2010, 12:32
- - eldar85   так вот именно что про QThread написано всего то: ...   11.6.2010, 18:07
- - Litkevich Yuriy   создаёшь десять экземпляров класса MyThread, всем ...   11.6.2010, 19:51
- - eldar85   спасибо)   12.6.2010, 1:49
- - eldar85   вновь взялся за потоки, выяснил как их запускать в...   21.6.2010, 14:01
|- - BRE   Цитата(eldar85 @ 21.6.2010, 15:01) одно к...   21.6.2010, 14:10
- - Алексей1153   Sleep(10); - это же, вроде, 10мс А разве основн...   21.6.2010, 14:05
- - eldar85   если не сделать thread[n].wait();...   21.6.2010, 14:25
|- - BRE   Цитата(eldar85 @ 21.6.2010, 15:25) если н...   21.6.2010, 14:28
- - eldar85   убрав второй цикл все потоки тут же убиваются посл...   21.6.2010, 14:37
|- - BRE   Цитата(eldar85 @ 21.6.2010, 15:37) убрав ...   21.6.2010, 14:39
- - eldar85   большое вам спасибо, наконец то получилось))) вот ...   21.6.2010, 19:40
- - eldar85   все же сложность одна осталась с многопоточностью,...   25.6.2010, 10:26
- - Алексей1153   Цитатачтобы метод ран использовал главное окно для...   25.6.2010, 10:34
- - eldar85   да я тоже думал об этом, только не совсем разберус...   25.6.2010, 10:38
- - Алексей1153   eldar85, там вроде пофиг, приватный он или открыты...   25.6.2010, 10:42
- - eldar85   вот создал я паблик слот в главном окне public s...   25.6.2010, 10:50
- - Алексей1153   нет, как-то вот так class MyThread: .... ...   25.6.2010, 10:53
- - eldar85   большое спасибо, сейчас буду пробывать, потом отпи...   25.6.2010, 11:13
- - Алексей1153   eldar85, я не знаю иерархию твоих инклудов. Прицеп...   25.6.2010, 11:26
- - eldar85   спасибо тебе за совет, все получилось)))))))))))))...   25.6.2010, 14:55
- - Алексей1153   Ага, вижу косяк, спецификатор доступа не переопред...   25.6.2010, 19:55
- - eldar85   все работает отлично, вот только еще с одним бы ра...   25.6.2010, 20:10
- - Алексей1153   попробуй processEvents() void Thread::run...   25.6.2010, 20:16
- - Litkevich Yuriy   eldar85, ты всё же сделай примитивный проект, окно...   25.6.2010, 20:42
- - eldar85   а все, я разобрался почему))) дело было в том что ...   25.6.2010, 21:39
- - Алексей1153   Цитата(eldar85 @ 26.6.2010, 0:39) постави...   26.6.2010, 5:17
- - wolf.diesel   Вообще, чтобы небыло подобных вопросов о межпроцес...   13.7.2010, 9:29
- - Алексей1153   Цитата(wolf.diesel @ 13.7.2010, 12:29) бе...   13.7.2010, 18:26
- - wolf.diesel   Пардон, неправильно выразился QtConcurrent - подо...   14.7.2010, 17:56


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


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




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