|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
|
evgovs1991 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.10.2014 Репутация: нет Всего: нет |
Есть вот такая задача:
Пользователь задает список, каждый элемент которого включает дату и время. Количество (пар дата / время) не ограничено. Для каждого элемента списка создается отдельный поток, который в указанные пользователем дату и время открывает окно с сообщением о наступившем событии и ждет от пользователя подтверждения о прочтении. Если подтверждение не приходит в течение N секунд, то окно закрывается и повторно выдается через K секунд (N и K задаются в настройках). Если пользователь подтверждает прочтение, то поток разрушается и элемент удаляется из списка. Для задания интервалов времени использовать таймеры ожидания. Дату и время я храню в листбоксе. Написал функцию которая проверяет наступило событие или нет. Пытался сделать через компонент Timer создавая динамически таймер для каждого потока отслеживания но не получается...выводит одно событие максимум и при добавление потоков вылетает. Подскажите в каком направление действовать или алгоритм как это сделать.
|
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
VCL экранные элементы расчитанны на работу ТОЛЬКО из главного потока управления программы. Это во первых.
Во вторых - ваш поток (EventThread) проверяет, не совпала ли случайно дата и время из какого то (именно какого то, а не последовательного, как вы написали) элемента списка с текущим. Если да - то показывает сообщение. После чего немедленно завершается, не дожидаясь ничего. Это во вторых. В третьих - Borland C++ Builder - это не Win API (на который намекает упоминание потоков и таймеров ожидания в задании) В четвертых - 'подтверждения о прочтении' это не ShowMessage. Она не умеет закрываться по таймауту, как указано в задании. |
|||
|
||||
evgovs1991 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.10.2014 Репутация: нет Всего: нет |
Программу надо сделать в embarcadero rad studio на Application Form. Данные храняться у меня в контейнере list
Суть задания в этом и есть добавил по нажатию кнопки задание в список,отображаю листбоксом для наглядности. Потом нажимаю пуск и должны открыть окна с сообщениями если совпала дата и время. Как мне контролировать время наступления события? Или чтобы поток вызывал Функцию каждую секунду? |
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Если вам нужен именно отдельный поток и ожидание с помощью WaitableTimer, то вам нужно:
Если отдельный поток не нужен, то это всё делается гораздо проще на обычных таймерах (TTimer) |
|||
|
||||
evgovs1991 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.10.2014 Репутация: нет Всего: нет |
Спасибо, попробую разобраться. В этом и загвостка что нельзя Timer использовать для N и К |
|||
|
||||
XPyCT |
|
|||
Опытный Профиль Группа: Участник Сообщений: 381 Регистрация: 24.8.2007 Где: Moldova Репутация: нет Всего: 10 |
Кто мешает создать свои собственный таймер?
что то типо этого, естественно оберните в функцию или метод класса и dwAttTime вынесите в класс приватным инициализируйте при старте в констукторе |
|||
|
||||
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |