Название: Стандартные потоки C++ в Qt Отправлено: SydoQQ от Апрель 26, 2017, 12:02 Доброго времени суток!
Столкнулся с одной проблемой, при использовании стандартных потоков в Qt, использую версию 5.7. Нашел строку, из-за которой происходит крах программы, это строка 49. При комментировании ее, естественно программа работает на ура. И самый интересный момент, если в функию Код: LineItem->setPos(0,returnLinePosition()); Код: LineItem->setPos(0,0); Код: int n=100; LineItem->setPos(0,n); Вот полный код .cpp Код: #include "mainwindow.h" Код: #ifndef MAINWINDOW_H Код: QObject::startTimer: Timers cannot be started from another thread Название: Re: Стандартные потоки C++ в Qt Отправлено: Пантер от Апрель 26, 2017, 12:13 Ты неправильно работаешь с потоками.
1. Используй QThread 2. С GUI можно работать напрямую только из основного потока, другие потоки должны использовать сигнал/слоты. Название: Re: Стандартные потоки C++ в Qt Отправлено: SydoQQ от Апрель 26, 2017, 15:28 Ты неправильно работаешь с потоками. Тогда возникает вопрос, почему QGraphicsScene работает нормально, хотя тоже изменяется в потоке. И я пробывал использовать QThread, однако у меня происходило зацикливание и крах программ, может я не правильно его использовал, но я прочитал достаточно статей, и на хабре и у шлея. Не могли бы вы скинуть рабочий пример?!1. Используй QThread 2. С GUI можно работать напрямую только из основного потока, другие потоки должны использовать сигнал/слоты. Название: Re: Стандартные потоки C++ в Qt Отправлено: gil9red от Апрель 26, 2017, 22:20 QGraphicsScene это модель с данными, сама она не рисует в GUI, этим QGraphicsView занимается
Название: Re: Стандартные потоки C++ в Qt Отправлено: SydoQQ от Апрель 27, 2017, 06:45 QGraphicsScene это модель с данными, сама она не рисует в GUI, этим QGraphicsView занимается Тогда не могли бы вы подсказать, в каком мне направлении копать, что бы все работало нормально?!Название: Re: Стандартные потоки C++ в Qt Отправлено: gil9red от Апрель 27, 2017, 09:08 Я просто ответил на вопрос :)
Цитировать Тогда возникает вопрос, почему QGraphicsScene работает нормально, хотя тоже изменяется в потоке. Название: Re: Стандартные потоки C++ в Qt Отправлено: Igors от Апрель 27, 2017, 09:44 Тогда возникает вопрос, почему QGraphicsScene работает нормально, хотя тоже изменяется в потоке. Как говорят Цитировать Тестирование может показать наличие багов, но не их отсутствие. Т.е. если какая-то ветка у Вас работает - это совсем не значит что проблем нетЕсли исходники больше странички текста или их хотя бы 2, то прочитать/осмыслить их на форуме трудно, проще игнорировать этот топик. Выкладывайте в виде zip архива с компилируемым примером внутри Чего искать приключений со "стандартными потоками"? С QThread возможно ответят 10 человек т.к. знают и работают с этим, а с std::thread - ну может один. И что там хорошего в std::thread? Код: std::thread BackGroundTH{&MainWindow::on_BACKgroundChange,this}; И в любом случае святая правда что хватать UI из НЕ главной нитки - НИЗЗЯ! Тогда не могли бы вы подсказать, в каком мне направлении копать, что бы все работало нормально?! Перейти на QThread и задействовать слот/сигнал Название: Re: Стандартные потоки C++ в Qt Отправлено: SydoQQ от Апрель 27, 2017, 16:40 Тогда возникает вопрос, почему QGraphicsScene работает нормально, хотя тоже изменяется в потоке. Как говорят Цитировать Тестирование может показать наличие багов, но не их отсутствие. Т.е. если какая-то ветка у Вас работает - это совсем не значит что проблем нетЕсли исходники больше странички текста или их хотя бы 2, то прочитать/осмыслить их на форуме трудно, проще игнорировать этот топик. Выкладывайте в виде zip архива с компилируемым примером внутри Чего искать приключений со "стандартными потоками"? С QThread возможно ответят 10 человек т.к. знают и работают с этим, а с std::thread - ну может один. И что там хорошего в std::thread? Код: std::thread BackGroundTH{&MainWindow::on_BACKgroundChange,this}; И в любом случае святая правда что хватать UI из НЕ главной нитки - НИЗЗЯ! Тогда не могли бы вы подсказать, в каком мне направлении копать, что бы все работало нормально?! Перейти на QThread и задействовать слот/сигнал Название: Re: Стандартные потоки C++ в Qt Отправлено: Igors от Апрель 28, 2017, 12:12 Цитированием не злоупотребляйте, отвечаете на последнюю строку - ее и цитируйте, или вообще ничего если и так ясно о чем речь. Давайте форум не захламлять
Пробывал сделать как вы рекомендовали, но я не как не могу добится бесконечного цикла с использованием QThread, то ли я не правильно что то делаю, то ли у меня создается новый поток, а главный просто виснет, это первое. А второе если использовать сигнал/слоты приложение то работает, но у него нету того быстродействия которое нужно, явно видно, что приложение подвисает. Как мне решить эту проблему без потери производительности?! Возможно есть еще какие то средства которые помогу решить эту задачу?! Здесь однозначно: плохо пробОвали. Напр как там можно НЕ добиться бесконечного цикла - хз. Выкладывайте Ваши попытки с QThread (с учетом сказанного выше), думаю тогда Вам быстро помогутНазвание: Re: Стандартные потоки C++ в Qt Отправлено: SydoQQ от Май 02, 2017, 10:46 Всем спасибо, кто принимал участие в обсуждении этой темы. Добился требуемого результат с использованием контекста рисования, без потери производительности, кому будет интересен код, могу скинуть. Считаю что тема может быть закрыта.
|