URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7374
[ Назад ]

Исходное сообщение
"Segfaults в RH 9.0 & Qt 3.1 (+QThread)"

Отправлено buddha eyez , 21-Май-08 15:14 
Пишу программу в RH 9.0 + Qt 3.1 (знаю что старьё ещё то, но попросили), юзаю QThread. В потоках управляю контролами путём посылки своих сигналов, приаттачиваю через connect как положено и вызываю через emit. Проблема: довольно часто на консоль валится куча таких сообщений -
X Error: BadPixmap
Code : ...bla bla bla

X Error: BadRequest
Code : ...bla bla bla

ну и т.д. А затем ненавистный Segfault. Кстати, иногда всё отлично работает. Код весь перелопатил несколько раз, падает как раз в тот момент, когда вызываются ф-ции отрисовки. Я в тупике, человеки добрые, подскажите что делать...


Содержание

Сообщения в этом обсуждении
"Segfaults в RH 9.0 & Qt 3.1 (+QThread)"
Отправлено primus , 21-Май-08 16:04 
>[оверквотинг удален]
>X Error: BadPixmap
>Code : ...bla bla bla
>
>X Error: BadRequest
>Code : ...bla bla bla
>
>ну и т.д. А затем ненавистный Segfault. Кстати, иногда всё отлично работает.
>Код весь перелопатил несколько раз, падает как раз в тот момент,
>когда вызываются ф-ции отрисовки. Я в тупике, человеки добрые, подскажите что
>делать...

Работа с GUI только из основного потока.
This thread is the only thread that is allowed to perform GUI operations,
including generating and receiving events from the window system.
===================================================================
Qt does not support creating QApplication and running the event loop (with QApplication::exec()) in a secondary thread. You must create the QApplication object and call QApplication::exec() from the main() function in your program.



"Segfaults в RH 9.0 & Qt 3.1 (+QThread)"
Отправлено hellbat , 22-Май-08 01:12 
Так во втором потоке у меня и не создаётся QApplication. Там просто делается emit mysignal.
А к mysignal сделан коннект функции, которая и работает с контролами. Т.е. во 2 потоке всего лишь посылается сигнал, а обрабатывается он из главного потока.

"Segfaults в RH 9.0 & Qt 3.1 (+QThread)"
Отправлено primus , 25-Май-08 18:42 
А можете показать минимальную часть в общем работающего, но "падающего" кода?

"Segfaults в RH 9.0 & Qt 3.1 (+QThread)"
Отправлено hellbat , 27-Май-08 23:19 
>А можете показать минимальную часть в общем работающего, но "падающего" кода?

Спасли меня, как всегда, родные маны :) В инете не нашёл, а нашёл в них, что даже emit нельзя делать, нужно послывать сообщения, используя QCustomEvent, которые добавятся в очередь и корректно обработаются QTшным потоком.

Спасибо за отклик на топик.