Разработка программы диспетчеризации запуска приложений С++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

DimonLimon
Сообщения: 3
Зарегистрирован: 27 ноя 2015, 19:07

Помогите пожалуйста, суть в том что нужно сделать программу которая в определённое время (например в 14:33) запустит любой файл или программу... вот что я сделал

Код: Выделить всё

#include "stdafx.h" 

#include <iostream> 
#include <conio.h>
#include <process.h>
#include <time.h>

using namespace std;

int main(int argc, int *argv[])
{
	
	time_t seconds = time(NULL);
	tm* timeinfo = localtime(&seconds);
	char* format = "%H:%M";
	char buffer[80];
	strftime(buffer, 80, format, timeinfo);
	cout << "Current Datetime: " << buffer << endl;

	execl("c:\\WINDOWS\\system32\\notepad.exe", "c:\\WINDOWS\\system32\\notepad.exe", NULL);	

	return 0;
}
тут выводиться системное время и сразу запускается блокнот...
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

2B OR NOT(2B) = FF
DimonLimon
Сообщения: 3
Зарегистрирован: 27 ноя 2015, 19:07

Зачем мне это мне нужно программу написать а не в самой виндовс задавать расписание запуска программ..
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Зачем мне это мне нужно программу написать а не в самой виндовс задавать расписание запуска программ..
Зачем писать код который уже написан? Если в целях обучения, то это тривиально. Берешь вычисляешь timestamp (при помощи mktime) времени запуска, спишь при помощи std::this_thread::sleep_until() где параметр получается из time_t при помощи std::chrono::system_clock::from_time_t()), потом запускаешь программу. Если пишешь нечто типа crond, то используешь очередь с приоритетами (std :: priority_queue), где приоритет - время запуска. Проверяешь время запуска задачи в голове очереди, и дальше спишь пока время не наступит, потом запускаешь. Если задача одноразовая, то выкидываешь ее из очереди после запуска, если периодическая, то вычисляешь время следующего запуска и помещаешь обратно в очередь.
2B OR NOT(2B) = FF
DimonLimon
Сообщения: 3
Зарегистрирован: 27 ноя 2015, 19:07

мне нужно самому написать программу...мне помогут?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

DimonLimon писал(а):мне нужно самому написать программу...мне помогут?
Тебе же Absurd накидал примерный план работ.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Готовых планировщиков задач существует большое количество.
Но если браться самому за написание подобной программы, то необходимо будет изучить основы многопоточного программирования.
Основой таких программ является таймер, который срабатывает через заданные интервалы времени.
Тебе нужно будет написать функцию, которая будет циклически с интервалом в одну секунду получать локальное время и сравнивать его с заданным. Выдержка нужных интервалов времени обеспечивается именно таймером.
Когда оба этих значения сравняются, произойдёт запуск указанного приложения.
Но эта функция должна работать асинхронно, т.е. выполняться в отдельном потоке, чтобы не блокировать основной.
Поумнеть несложно, куда труднее от дури избавиться.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Я проверял время в бесконечном цикле во вторичном потоке. Таймерные сообщения ни как не использовались ни для какой выдержки интервалов между вызовами функции текущего времени. Более того, при таком подходе вообще нельзя надеяться на выдержку стабильных, или хотябы приблизительно стабильных интервалов.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сионист писал(а):Я проверял время в бесконечном цикле во вторичном потоке.
Thread yield делал-то хотябы иногда или просто так грел одно из ядер?
Сионист писал(а):
Таймерные сообщения ни как не использовались ни для какой выдержки интервалов между вызовами функции текущего времени.
Какие таймерные сообщения? WM_TIMER чтоли? О них речь не шла.
Сионист писал(а):
Более того, при таком подходе вообще нельзя надеяться на выдержку стабильных, или хотябы приблизительно стабильных интервалов.
Ванильные Винда и Линукс вообще не реалтаймовые ОС. Нужен реалтайм - покупай PLC и щелкай в ней герконами. Но crond который не съедает целиком одно ядро люди как-то пишут.
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Absurd писал(а):Thread yield делал-то хотябы иногда
Я даже не знаю, что это такое.
Absurd писал(а):или просто так грел одно из ядер
Оно там всего одно.
Absurd писал(а):WM_TIMER чтоли? О них речь не шла.
Вот же:
Decoder писал(а):Выдержка нужных интервалов времени обеспечивается именно таймером.
. Так что не надо.
Absurd писал(а):Но crond который не съедает целиком одно ядро люди как-то пишут.
Кто такой?
Absurd писал(а):Ванильные Винда и Линукс вообще не реалтаймовые ОС.
Слово "приблизительно" знакомо? Чем надежда от гарантии отличается знаешь?
Absurd писал(а):Нужен реалтайм - покупай PLC и щелкай в ней герконами.
Есть ещё фотон. Это виндоусподобная (внешне) ОС реального времени.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить