Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284

Оповещение в определенное время

22.11.2012, 13:09. Показов 2760. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача сделать так чтоб при условии ( в заданное время):
C++
1
2
3
4
if ((hour%2==0) && (minute==40) && (second==0))
{
Beep(500,100);
}
выводилось сообщение с текстом "пора..." с кнопкой "ОК" и при этом еще включалось звуковое оповещение ( с помощью Beep) и играло до тех пор пока я не нажму ОК на сообщении. И при этом программа должна дальше работать, а то написал пару вариантов таких что система так загружается что кнопку ОК нажать тяжеловато и все виснет.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2012, 13:09
Ответы с готовыми решениями:

Вывести напоминание в определенное время
нужно вывести сообщение, как только наступит определенное время, выдает ошибку, как исправить

Действие через определенное время
Возник вопрос, как сделать что бы скажем через 1 секунду выполнялось определенное действие? Вот код, но приходится нажимать на кнопку, а...

Запуск некой функции в определенное время
Необходимо чтобы ежедневно в заданное время запускалась определенная функция. Подскажите как это сделать?

11
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
22.11.2012, 13:17
Берешь TTimer и скажем каждую секунду проверяешь свое условие, если совпало играешь бип через функцию-поток Вообщем как то так (код не проверял, но должно работать):
C++
1
2
3
4
5
6
7
8
9
10
11
12
DWORD CALLBACK ThreadF(void*Sender) /// Поток-функция
{   Beep(500,100);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject*Sender)
{   if ((hour%2==0) && (minute==40) && (second==0))
    {
        DWORD ThreadID=NULL; //Идентификатор потока
        HANDLE hThread=::CreateThread(0,0,ThreadF,0,0,&ThreadID); /// ThreadF(void*Sender)-сама функция
        CloseHandle(hThread); //Больше не нужен
    }
}
1
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
22.11.2012, 13:18
При срабатывании открываешь окно с кнопкой ОК.

C++
1
2
 Form9->Show();
 forms *Thr=new forms(false);
Запускается поток

в Потоке код:

C++
1
2
3
  while (Form9->Visible==true){
Beep(500,500);
}
На форме с кнопкой ок по нажатию кнопки делаешь:

C++
1
2
Form9->Visible=false;
Form9->Close();
1
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
22.11.2012, 13:35
Все таки через функцию-поток не получится, придется делать полноценный поток, чтобы его можно было закрыть по нажатию кнопки. А еще ваше условие комп может проскочить, если задумается в роковую секунду и не вызовет проверку. При этом нужно не создать второй поток для бипа.
0
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
22.11.2012, 13:39
Цитата Сообщение от gumi250 Посмотреть сообщение
придется делать полноценный поток
Ну я подразумевал создание полноценного Thread объекта.
Цитата Сообщение от gumi250 Посмотреть сообщение
если задумается в роковую секунду и не вызовет проверку.
Не совсем понял проблемы, проверка делается каждые 500мс или сколько там, после нажатие кнопки "Ок" свойство Visible станет false, даже если задумается и проскочит один раз - второй раз не проскочит. Свойство то не изменилось. Или я что-то не так понял?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
22.11.2012, 13:51
Не совсем понял проблемы, проверка делается каждые 500мс или сколько там
Комп может подвиснуть на 1 сек. и в эту секунду вообще не делать проверок.
Я так понимаю вы предлагаете создавать поток при событи Form9->onShow
1
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
22.11.2012, 13:54
Цитата Сообщение от gumi250 Посмотреть сообщение
Form9->onShow
Его можно прямо тут:
C++
1
2
3
4
5
6
if ((hour%2==0) && (minute==40) && (second==0))
{
Form9->Show();
 forms *Thr=new forms(false);
 
}
0
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
22.11.2012, 13:56  [ТС]
Дела обстоят так... первый вариант, во так написал
C++
1
2
3
4
5
6
7
8
9
TDateTime CurrTime = Now();
unsigned short hour, minute, second, ms;
CurrTime.DecodeTime(&hour, &minute, &second, &ms);
if ((hour%2==0) && (minute==40) && (second==0))
{
DWORD ThreadID=NULL; //Идентификатор потока
HANDLE hThread=::CreateThread(0,0,ThreadF,0,0,&ThreadID); /// ThreadF(void*Sender)-сама функция
CloseHandle(hThread); //Больше не нужен
}
Остался только вопрос куда воткнуть сообщение и кнопку ок ? как ее сюда привязать ?

Второй вариант
Принцип понятен, но вот куда воткнуть
C++
1
2
3
while (Form9->Visible==true){
Beep(500,500);
}
? Попробовал пару тройку вариантов вообще все напрочь зависает, а и еще на
C++
1
forms *Thr=new forms(false);
ругается...
Я новенький, поэтому мне бы по точнее все писать... а то уже наверно с этим часа 3 сижу пока толку нет...
0
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
22.11.2012, 14:00
Цитата Сообщение от GrukhvinEV Посмотреть сообщение
Я новенький, поэтому мне бы по точнее все писать... а то уже наверно с этим часа 3 сижу пока толку нет..
В общем, в своем проекте кликаешь "New-Other-Thread Object", у тебя добавляется новый Unit%.cpp. И просят ввести имя. Можешь прям так и ввести: forms. Не забываей прописать инклуды. После чего в новосозданом потоке
C++
1
2
3
4
5
6
void __fastcall forms::Execute()
{
  while (Form9->Visible==true){
Beep(500,500);
}
}
1
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
22.11.2012, 14:33  [ТС]
Как все сложно.... у меня русский билдер, но я так понял надо создать новую форму, создал.Сделал на форме кнопку
C++
1
2
3
4
5
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Form2->Visible=false;
Form2->Close();
}
Сделал инклуд. Все нормально Form2 (Unit2.cpp) вызывается из Form1(Unit1.cpp);
Вот ето верно или нет :
C++
1
2
3
4
5
6
void __fastcall Form2::Execute()
{
  while (Form2->Visible==true){
Beep(500,500);
}
}
Или что такое forms ? Не пойму и как под мое имя переписать ?
C++
1
Form2 *Thr=new Form2(false);
.

Добавлено через 2 минуты
А помойму понял,
C++
1
forms *Thr=new forms(false);
это будет наш еще 1 файл Unit%.cpp, это будет что то типа второй отдельной программы ?
Если да, то у меня русская версия, как это называется, как мне найти нужное ?
0
 Аватар для Antiplayer
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
22.11.2012, 14:37
Цитата Сообщение от GrukhvinEV Посмотреть сообщение
Если да, то у меня русская версия
Это плохо.

По идее там будет Файл-Новый-Другое-Thread объект

Там выскочит окно где надо будет ввести имя. Это штука называется поток. Почитай про потоки. Это основы основ
0
25 / 25 / 2
Регистрация: 08.11.2011
Сообщений: 284
22.11.2012, 16:47  [ТС]
Спасибо. Разобрался, все настроил, работает. Про потоки почитаю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2012, 16:47
Помогаю со студенческими работами здесь

На определенное время показать пользователю окно
Добрый день! Имеется следующая проблема. В моем приложении всплывающие сообщения оформлены в виде не большой прямоугольной формы на которую...

Заливка круга цветом за определенное время по часовой стрелке
Здравствуйте уважаемые форумчане. Программированием занимаюсь давно, но как то так получилось, что раньше не приходилось сталкиваться с...

Зажечь второй ILLed через определенное время после зажигания первого
Здраствуйте!! Есть програмка (включения выключения лампушки с помощью TrackBar) : TForm1 *Form1; ...

Открыть и закрыть файл exe через определенное время
Извините за тупой вопрос. Мне нужно просто открыть экзешник и со временем,например 5 секунд,чтобы сам просто закрылся. То есть просто...

Написать кликер, осуществляющий n-ое количество кликов за определенное время
Всем привет! Нужна помощь... Не опытен в работе С++ Нужно задать координаты мыши допустим в 2 местах после чего программа сделает...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru