Совместимы ли pthread с Qt5? - PullRequest
0 голосов
/ 28 мая 2019

Я пишу простое тестовое приложение с графическим интерфейсом Qt5, которое должно иметь возможность открывать файл / dev / input / eventX для чтения событий и перечисления событий, которые он находит в пользовательском интерфейсе Qt. Я должен сказать, что у меня практически нет опыта работы с Qt5, поэтому я уверен, что просто у Qt есть какой-то способ сделать это, и я не использую его правильно.

Проблема в том, что я пытаюсь реализовать чтение файла / dev / input / eventX в pthread, который создается в конструкторе класса QMainWindow для GUI. На данный момент приложение работает, вроде ... когда я запускаю приложение через QtCreator, появляется пользовательский интерфейс, но когда я нажимаю на экран, чтобы попытаться сгенерировать событие, ничего не отображается в выводе консоли, где мой Сообщения журнала, отображающие коды событий, должны быть.

Однако, когда я запускаю приложение из командной строки, так как ему необходим sudo доступ, чтобы иметь возможность читать из / dev / input / eventX , во-первых, оно блокируется командной строки и будет отображать события, как и ожидалось, в консоли, когда я нажимаю на экран, но графический интерфейс никогда не отображается.

Так что похоже, что pthread блокирует графический интерфейс? В конструкторе у меня есть следующие две строки для создания pthread:

pthread_create(&t_touch, NULL, &touchPoll, NULL);
pthread_join(t_touch, NULL);

Где t_touch - это объект pthread_t, который является членом класса главного окна. Сенсорный опрос - это функция, которая выполняет опрос, который должен быть сделан глобальным, отдельно от класса главного окна, потому что, если я сделаю его частью класса, единственный способ заставить синтаксис работать правильно, это иметь статическую вспомогательную функцию для вызова метода touchPoll, , поскольку существует проблема с контекстом this, когда дело доходит до указателей на функции . Конечно, благодаря этому мой метод опроса не может получить доступ к главному окну, если я хочу передать ему информацию на основе вызванных событий ...

К сожалению, C ++ 11 и выше не подходят, поскольку моя команда может использовать C ++ 98 только для проектов. Кто-нибудь знает, в чем проблема с пользовательским интерфейсом? Pthread просто блокирует это? Есть ли какой-нибудь встроенный класс Qt, который я должен использовать вместо этого?

...