|
0 / 0 / 1
Регистрация: 18.12.2022
Сообщений: 3
|
|
Как использовать потоки в современном C++ в приложении на основе цикла событий?12.10.2023, 11:04. Показов 1247. Ответов 6
Я пишу интерактивное GUI приложение. Мне понадобилось выполнить длительную по времени операцию - сканирование диска. Я хочу запустить эту операцию в отдельном потоке. Часть кода для работы с диском я пишу на чистом C++, чтобы не зависеть от платформы. Я реализовал запуск сканирования в отдельном потоке с использованием std::thread и std::mutex, но очень многие, кого я просил посмотреть этот код отвечают, что использование голых потоков это не правильно и правильно мыслить категориями задач. И использовать std::future или std::async или другие подобные средства. Но я не смог найти никаких примеров использования std::future или std::async в приложениях на основе обработки событий. Во всех примерах после запуска длительного задания в главном потоке нужно вызывать wait. А я не могу останавливать главный поток, так как он должен обрабатывать события от пользователя, чтобы приложение не зависало. Мне нужно, чтобы по завершению сканирования генерировалось событие об окончании сканирования.
Можете подсказать: как использовать возможности работы с потоками в современном C++ в приложении на основе обработки событий, без вызова wait? Мою текущую реализацию и часть советов по её улучшению можно посмотреть здесь.
0
|
|
| 12.10.2023, 11:04 | |
|
Ответы с готовыми решениями:
6
Как создать календарь событий в приложении на Android Studio? Как поведут себя потоки из Socket и SocketSchannel в многопоточном приложении? Как правильно использовать потоки? |
|
фрилансер
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,003
|
|
| 12.10.2023, 11:34 | |
|
0
|
|
|
Диванный эксперт
|
|
| 12.10.2023, 11:38 | |
|
megafanat, Нужно чтобы цикл сообщений UI библиотеки поддерживал прием событий из других потоков.
В WinAPI это решается вызовом PostMessageВ Qt - через тип соединения Qt::QueuedConnection
0
|
|
|
фрилансер
6444 / 5639 / 1128
Регистрация: 11.10.2019
Сообщений: 15,003
|
|
| 12.10.2023, 11:50 | |
|
а универсально решается синхронизированым std::vector
1
|
|
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 863
|
||
| 12.10.2023, 12:22 | ||
|
использование "голых потоков" не всегда удобно - ибо надо ими управлять и каждый раз писать код для управления потоками неудобно. поэтому я обычно применяю пул потоков - он давно написан, отлажен. Для более сложных случаев - систему задач - там более сложный алгоритм управления очередью заданий. Для общений мажду потоками мне более удобны очереди - отдельный поток или потоки просто складывают туда все что хотят передать, а в другом потоке (или потоках) по мере возможностей их забирают. и никакого спейифического отношений к winapi ни к qt или к с++ это не имеет. если в очереди ничего нету - главный поток продолжает заниматься своими делами.
1
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 12.10.2023, 15:24 | ||
|
Так что да, вам нужно мыслить категориями задач, но это мышление должно быть выстроено вокруг уже существующей инфраструктуры вашего GUI приложения. Если вы используете какой-то GUI фрейморк, то там уже должны быть все нужные инструменты. Т.е. проще говоря std::async абстрактно и вне контекста вам может и не подойти, потому что он скорее всего не встроен в эту инфраструктуру. Если же вы пишете GUI приложение с нуля (например на WinAPI) и сами выстраиваете эту инфраструктуру, то используйте любые уместные средства, здесь нет и не может быть никаких запретов.
0
|
||
|
|
||
| 12.10.2023, 16:54 | ||
|
0
|
||
| 12.10.2023, 16:54 | |
|
Помогаю со студенческими работами здесь
7
Как правильно использовать потоки?
Как прописать прослушивание событий на каждый элемент цикла Пожалуйста, объясните как использовать потоки Как использовать обработчики событий в битриксе? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|