Пишу программу в RH 9.0 + Qt 3.1 (знаю что старьё ещё то, но попросили), юзаю QThread. В потоках управляю контролами путём посылки своих сигналов, приаттачиваю через connect как положено и вызываю через emit. Проблема: довольно часто на консоль валится куча таких сообщений -
X Error: BadPixmap
Code : ...bla bla blaX Error: BadRequest
Code : ...bla bla blaну и т.д. А затем ненавистный Segfault. Кстати, иногда всё отлично работает. Код весь перелопатил несколько раз, падает как раз в тот момент, когда вызываются ф-ции отрисовки. Я в тупике, человеки добрые, подскажите что делать...
>[оверквотинг удален]
>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.
Так во втором потоке у меня и не создаётся QApplication. Там просто делается emit mysignal.
А к mysignal сделан коннект функции, которая и работает с контролами. Т.е. во 2 потоке всего лишь посылается сигнал, а обрабатывается он из главного потока.
А можете показать минимальную часть в общем работающего, но "падающего" кода?
>А можете показать минимальную часть в общем работающего, но "падающего" кода?Спасли меня, как всегда, родные маны :) В инете не нашёл, а нашёл в них, что даже emit нельзя делать, нужно послывать сообщения, используя QCustomEvent, которые добавятся в очередь и корректно обработаются QTшным потоком.
Спасибо за отклик на топик.