Я работаю на каком-то мобильном продукте c ++, но мне нужно, чтобы основной поток моих приложений по-прежнему работал без каких-либо блокировок при выполнении какой-либо тяжелой работы в фоновом потоке и повторном запуске в основном потоке. Но я понял, что в API-интерфейсе потока c ++ нет runOnMainThread / runOnUIThread. Я попытался разобраться в проблеме и обнаружил, что нужно зависеть от библиотеки или создать собственную очередь событий потока. Хотя это хорошо, но я думаю, чтобы иметь поведение, которое может запускать ONUIThread.
Как это не работает: упомянутая библиотека создает таймер, устанавливает SIGALRM
обработчик сигналов и отправляет поставленные в очередь задачи при срабатывании сигналов. Это позволяет обрабатывать задачи в главном потоке, даже когда он занят. тем не мение POSIX допускает только небольшой набор функций, безопасных для асинхронных сигналов быть вызванным внутри обработчика сигнала. Запуск произвольного кода С ++ внутри обработчика сигнала нарушает это ограничение и оставляет приложение в безнадежно обреченном состоянии.
После некоторых исследований и разработок я создал библиотеку под названием NonBlockpp
Это небольшая библиотека c ++, позволяющая мобильному приложению c ++ обрабатывать тяжелые и трудоемкие задачи в фоновом режиме и снова возвращаться в главный поток. Она была протестирована и вызвала событие основного потока.
Это также позволяет сохранять задачи и запускать их позже, все задачи не блокируют друг друга и не обеспечивают безопасность потоков.
Если вы нашли какой-либо вопрос или предложение, пожалуйста, не стесняйтесь поднимать вопрос, и мы можем обсудить его вместе.
Проект выпрямился из сигнала в pollEvent, так как обработчик сигнала может быть небезопасным в использовании.
Пожалуйста, посмотрите, что изменилось.