Вызов кросс-потока a.k.a запускается в потоке main / UI из другого потока без необходимости в зависимостях - PullRequest
0 голосов
/ 10 мая 2018

Я работаю на каком-то мобильном продукте c ++, но мне нужно, чтобы основной поток моих приложений по-прежнему работал без каких-либо блокировок, когда выполнял тяжелую работу в фоновом потоке и снова запускался в основном потоке. Но я понял, что в API-интерфейсе потока C ++ нет runOnMainThread / runOnUIThread. Я попытался разобраться в этом вопросе и обнаружил, что нужно зависеть от библиотеки или создать собственную очередь событий потока. Хотя это и хорошо, но я думаю о том, чтобы иметь поведение, которое может запускать ONUIThread.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Как это не работает: упомянутая библиотека создает таймер, устанавливает обработчик сигнала SIGALRM и отправляет поставленные в очередь задачи при срабатывании сигналов. Это позволяет обрабатывать задачи в главном потоке, даже когда он занят. Однако POSIX разрешает вызывать только небольшой набор функций, безопасных для асинхронных сигналов внутри обработчика сигнала. Запуск произвольного кода С ++ внутри обработчика сигнала нарушает это ограничение и оставляет приложение в безнадежно обреченном состоянии.

0 голосов
/ 10 мая 2018

Проект выпрямился из сигнала в pollEvent, так как обработчик сигнала может быть небезопасен в использовании.

Пожалуйста, посмотрите новое изменение.

NonBlockpp

Использование

0 голосов
/ 10 мая 2018

После некоторых исследований и разработок я создал библиотеку под названием NonBlockpp

. Это небольшая библиотека c ++, позволяющая мобильному приложению c ++ обрабатывать тяжелые и длительные задачи нав фоновом режиме и снова в главный поток. Он был протестирован и инициировал событие основного потока.

Это также позволяет сохранять задачи и запускать их позже, все задачи не блокируют друг друга и безопасность потока.

Как это работает: enter image description here

enter image description here enter image description here

Если вы нашлиЛюбой вопрос или предложение, пожалуйста, не стесняйтесь поднимать вопрос, и мы можем обсудить его вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...