|
5 / 5 / 4
Регистрация: 31.12.2008
Сообщений: 86
|
|
Синхронизация потоков - уведомление о событии30.09.2014, 22:19. Показов 1477. Ответов 3
Метки нет (Все метки)
Здравствуйте.
Я хочу реализовать параллельную одновременную работу двух потоков, один из которых получает сообщения о событиях в другом, не прерывая своей работы. Пример (грубый): Консольная программа, в основном потоке выполняются интерфейсные действия: навигация по текстовым менюшкам итд. В определенный момент запускается еще один поток, при этом первый поток продолжает работать в том же режиме. Второй поток некоторое время выполняет какие-либо действия, после чего сигнализирует первому потоку о своем завершении. Первый поток ловит это сообщение и реагирует на него. Есть ли способы адекватно реализовать что-то подобное? Ведь, если я правильно понял, при использовании для синхронизации объектов ядра типа "событие", первый поток будет тормозиться на WaitForSingleObject, и инструкции не будут выполняться дальше до получения сигнала о произошедшем событии. Возможно, есть другие объекты ядра, позволяющие реализовать такое взаимодействие? Если нет, можно ли обойтись без периодического повторения запроса или периодической проверки некоторой "сигнальной" переменной?
0
|
|
| 30.09.2014, 22:19 | |
|
Ответы с готовыми решениями:
3
Синхронизация потоков |
|
Native x86
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 30.09.2014, 22:26 | ||
|
1
|
||
|
19 / 19 / 14
Регистрация: 23.09.2014
Сообщений: 117
|
|
| 30.09.2014, 22:27 | |
|
В С++ 11 есть conditional variables и wait_until с проверкой того, почему вышли. Это, чтобы писать более-менее отстраненно от платформы.
Во многих примитивах наряду с блокировкой можно указать время блокировки и узнать, вышел ли из-за того, что случилось что-то или по таймауту. И, судя по мсдн, WaitForSingleObject в их числе вместе с WAIT_TIMEOUT.
1
|
|
|
5 / 5 / 4
Регистрация: 31.12.2008
Сообщений: 86
|
||
| 30.09.2014, 22:37 [ТС] | ||
|
То есть мы выполнили WaitForSingleObject, получили таймаут, работаем дальше. Но ведь событие может произойти уже на следующем тике. То есть WaitForSingleObject нам придется в любом случае проверять либо постоянно, либо приурочивать проверку к каким-либо действиям. Например (в моем примере), переход по менюшке - проверка WaitForSingleObject. Но если пользователь ничего не делает и программа находится в режиме ожидания... Вот тут я перестал писать и понял, что вот то, что я собирался сделать: пользователь ничего не делает = первый поток ждет ввода данных от пользователя = выполняется инструкция ввода данных (cin, getch - не важно). По происшествию события я хотел нагло прервать выполнение этой функции и сделать что-то еще. Извините, ум за разум зашел, нужно пойти поспать. Большое спасибо за ответы. Действительно, достаточно просто напихать WaitForSingleObject в стратегических местах.
0
|
||
| 30.09.2014, 22:37 | |
|
Помогаю со студенческими работами здесь
4
Синхронизация потоков в c++
Синхронизация потоков Event c++ Синхронизация процессов и потоков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|