Название: UI в (не) главной thread Отправлено: Igors от Июля 27, 2012, 16:40 Добрый день
Ну конечно "работать с UI только в главной thread" - это все знают. Однако у меня (приложение не использует Qt) возникла ситуация где очень захотелось "не из главной" - иначе переделывать много. Ну думаю почему нет - ведь я могу обеспечить что одна (и только одна) нитка работает с UI. Не тут-то было. Неприятности начались на таком старом нативном коде Код Если звать это из разных ниток, то приходит только событие движения мыши, а вот все остальное (keyDown, mouseDown) нет. Если звать только из главной - все норм. Да, эти ф-ции помечены как "not thread-safe" и, я так понял, это значит не только "нельзя вызывать одновременно", но и вообще "нельзя вызывать разными" (пусть последовательно) А что говорит теория, (содержательные) ссылки и.т.п.? Спасибо Название: Re: UI в (не) главной thread Отправлено: alexis031182 от Июля 27, 2012, 17:17 То есть это не только в Qt? Интересно.
Название: Re: UI в (не) главной thread Отправлено: vregess от Июля 27, 2012, 23:00 Поищи такой интересный проект - tnFox (http://www.nedprod.com/TnFOX/), там, как я помню, можно создавать и юзать GUI из разных потоков, возможно удастся выдрать идею.
Но предупреждаю, код там не для слабонервных (по крайней мере был раньше). А вариант перехвата событий в главном потоке с последующей передачей в другие не рассматривается? Название: Re: UI в (не) главной thread Отправлено: Igors от Июля 28, 2012, 12:27 А вариант перехвата событий в главном потоке с последующей передачей в другие не рассматривается? Оставлять главную нитку "только для UI" не всегда удобно, выгодно. НапрКод Это производительнее QtConcurrent и др т.к. поддерживается компилятором, да и в использовании проще. Однако главная нитка делает DoSomething как и остальные. Ну и понятно что если "все UI в главной" - все будет работать. Это легко заучить/запомнить, но хотелось бы понять причину ограничений. |