Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146

Оператор "Подожди"

29.04.2010, 06:23. Показов 2197. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа програмисты VCpp!!! Задача такова. При запуске форма запускает 3 потока: "основной", "канальный" и "вычислительный". В основном гуи, в канальном организованы запросы в канал к соседнему процессу, ну а в вычислительном кое какие вычисления, причем они строятся в цикле, параметры которого получают в канале... Так вот как заставить вычислительный поток подождать этих значений параметров, пока они не придут по каналу??? Ну или как вобще заставить кого бы ни было подождать определенных значений или событий?
В мсдн операторов WaitingFor куча, а какой применить и как непонятно... Подскажите плз!..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2010, 06:23
Ответы с готовыми решениями:

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 ...

Перегрузить для класса Vector оператор умножения и оператор разности
Перегрузить для класса Vector оператор умножения (умножение вектора на число) Перегрузить оператор разности Перегрузить оператор ввода...

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые трудности. Будьте добры, помогите решить. Буду...

12
191 / 151 / 61
Регистрация: 08.04.2010
Сообщений: 1,032
29.04.2010, 08:26
Почитай про симафоры и станет все понятно.
0
 Аватар для Hell Knight
230 / 60 / 17
Регистрация: 11.03.2010
Сообщений: 294
29.04.2010, 10:32
ну а вообще существует такая функция Sleep()
в качестве значения принимает кол-во миллисекунд сколько ждать.
например:
C++
1
Sleep(1000); // подождать 1 секунду
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
29.04.2010, 10:47
SphiNkSs, для начала опиши подробно логику работы каждого потока - что именно должен ждать каждый из потоков? Каково условие его "пробуждения"? Каково условие его "засыпания"?
0
191 / 151 / 61
Регистрация: 08.04.2010
Сообщений: 1,032
29.04.2010, 13:54
Sleep бесполезин, откуда можно знать сколько будет выполнятся тот или иной поток да еще и на разных ПК.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
29.04.2010, 16:45
Цитата Сообщение от SphiNkSs Посмотреть сообщение
Господа програмисты VCpp!!! Задача такова. При запуске форма запускает 3 потока: "основной", "канальный" и "вычислительный". В основном гуи, в канальном организованы запросы в канал к соседнему процессу, ну а в вычислительном кое какие вычисления, причем они строятся в цикле, параметры которого получают в канале... Так вот как заставить вычислительный поток подождать этих значений параметров, пока они не придут по каналу??? Ну или как вобще заставить кого бы ни было подождать определенных значений или событий?
В мсдн операторов WaitingFor куча, а какой применить и как непонятно... Подскажите плз!..
Заводится mutex. Это такой специальный объект, атомарность работы с которым гарантируется операционной системой. Запертое состояние mutex'а означает, что вычислительному потоку надо дожидаться завершения канального потока. Открытое состояние mutex'а означает, что канальный поток сформировал данные для вычислительного. Заводится буффер обмена (канальный поток записывает данные в буффер, вычислительный читает)

Логика работы вычислительного потока. Если mutex находится в открытом состоянии, то читаем данные, запираем mutex и начинаем вычисления. После того, как вычисления завершили, то впадаем в ожидание до тех пор, пока mutex не откроется.

Логика работы канального потока. Читаем данные в некий промежуточный буффер. Пока mutex находится в открытом состоянии, болтаемся в цикле ожидания. Как только mutex заперли (т.е. вычислительный поток прочитал все данные), копируем данные из промежуточного буффера в общий (откуда вычислительный поток может прочитать данные). После чего mutex открываем и начинаем цил заново (с чтения в промежуточный буффер)
1
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
06.05.2010, 10:37  [ТС]
С мьютексом понятно, но вот как его применить?! ничего не получается((... Как его создать и настроить??? Опишите пожалуйста кто-нибудь примитивную реализацию мьютекса, пожалуйста???
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.05.2010, 10:47
http://msdn.microsoft.com/en-u... S.85).aspx
1
5 / 5 / 3
Регистрация: 28.03.2010
Сообщений: 146
06.05.2010, 11:02  [ТС]
Я так понял пример заключается в последовательном доступе нитей к базе данных... А можно пример, который приостанавливает поток во время выполнения на некоторое время, а потом пускает снова?.. На паузу так сказать ставит его...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
06.05.2010, 11:10
Цитата Сообщение от SphiNkSs Посмотреть сообщение
Я так понял пример заключается в последовательном доступе нитей к базе данных...
Тебе нужен был пример работы с мутексами. Какая в пеньразница для чего они использовались в примере?

Цитата Сообщение от SphiNkSs Посмотреть сообщение
А можно пример, который приостанавливает поток во время выполнения на некоторое время, а потом пускает снова?.. На паузу так сказать ставит его...
А такое возможно? В линуксе с ходу что-то не помню, чтобы была такая возможность. Нормальный вариант - это главный поток взводит мутекс, а тот, который должен быть оставнолен, постоянно его опрашивает и когда увидит, что он взведён, то входит в состояние ожидания (опять-таки через мутекс). Хотя может под виндой свои умности есть
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
06.05.2010, 12:28
Цитата Сообщение от SphiNkSs Посмотреть сообщение
А можно пример, который приостанавливает поток во время выполнения на некоторое время, а потом пускает снова?.. На паузу так сказать ставит его...
пример таймера для отмеряния времени ищи сам.
поток "ставится на паузу" функцией SuspendThread()
"снимается с паузы" - ResumeThread()
2
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
06.05.2010, 13:24
здесь нужен не мутех, а эвент.
http://msdn.microsoft.com/en-u... S.85).aspx
WaitForMultipleObjects.
0
8 / 8 / 3
Регистрация: 05.05.2010
Сообщений: 27
06.05.2010, 20:30
Для точной задержки удобно использовать следующею конструкцию
C++
1
2
3
4
 //Создаем пустой указатель h, который будем использовать для задержки.
 h=CreateEvent(0, true, false, "et");
 
WaitForSingleObject(h,15);//Задержка в 5 миллисекунд
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2010, 20:30
Помогаю со студенческими работами здесь

Решить задачу используя условный оператор и оператор выбора
1)с++решать задачу с условным оператором.(первый фото) 2)с++решать задачу используя оператор выбора.(второе фото)

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор копирования, бинарный оператор суммы «*»,...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это оператор расширения области видимости.

Копирующий оператор присвоения и оператор + Не работают
Такая ситуация. Я - самоучка, пытаюсь выучить С++ по книге Сиддхартха Роа "Освой самостоятельно С++ по часу в день. 8-е издание". Там...

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры.
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru