Это для Sciter Notes если что...
И я не знаю в каком разделе вопросы по мультиплатформе уместны поэтому задаю здесь.
Делаю scheduled events (планнер событий ?) фичу:
Юзер имеет возможность задать время-дату некоего события — программа должна предупредить перед тем как наступит событие (за сколько — конфигурируемо).
У меня две опции:
1. заставить программу работать в background постоянно и проверять время самому. Но это представляется лишним оверкилом поэтому:
2. Использовать что-то типа cron — т.е. просить систему запустить мой exe по наступлению времени. Что явно представляется гуманнее ...
В связи с #2 возникают следующие вопросы:
a. Есть ли мультиплатформенное решение (Win,Lin,Mac) для cron-alike schedulers ?
a.1 Если "нет" то я правильно ли понимаю что в Windows оно известно как Task Scheduler
b. Существует ли способ разбудить спящую машину с помощью этих самых cron/schedulers. Или таки мне еще рано хотеть запретного?
Ну и вообще я в правильном направлении смотрю или это как-то по другому можно сделать?
Здравствуйте, c-smile, Вы писали:
CS>1. заставить программу работать в background постоянно и проверять время самому. Но это представляется лишним оверкилом поэтому:
Вариант самый простой и работоспособный.
CS>2. Использовать что-то типа cron — т.е. просить систему запустить мой exe по наступлению времени. Что явно представляется гуманнее ...
Я может отстал от жизни, но cron — это прерагатива root-а. Не суперпользователь там ничего редактировать не может. И универасльной замены cron-у, доступный по умолчанию в разных дистрибутивах и простым поьзователям вроде бы нет.
CS>a. Есть ли мультиплатформенное решение (Win,Lin,Mac) для cron-alike schedulers ?
На вскидку не припоминаю подобного api для linux-а вообще (root-овый cron не считаем, да и демон это а не api).
CS>a.1 Если "нет" то я правильно ли понимаю что в Windows оно известно как Task Scheduler
Ты уверен, что Task Scheduler может рулить пользователь, которого нет в группе "администраторы"? Не так критично, как с рутом, но неприятно.
CS>b. Существует ли способ разбудить спящую машину с помощью этих самых cron/schedulers. Или таки мне еще рано хотеть запретного?
По cron точно никак. В остальных случаях это зависит от самой машины, настроек bios, установленных дров и настроек электропитания в ос.
Если в прямую такой задачи нет, то лучше не связываться — работать будет только в ограниченом числе случаев.
CS>Ну и вообще я в правильном направлении смотрю или это как-то по другому можно сделать?
Либо основную программу оставляй в фоне. Либо простой демон/служба в сотню килобайт, которые будут waitabled висеть и стартовать её когда надо.
Здравствуйте, m2l, Вы писали:
m2l>Здравствуйте, c-smile, Вы писали:
CS>>2. Использовать что-то типа cron — т.е. просить систему запустить мой exe по наступлению времени. Что явно представляется гуманнее ... m2l>Я может отстал от жизни, но cron — это прерагатива root-а. Не суперпользователь там ничего редактировать не может. И универасльной замены cron-у, доступный по умолчанию в разных дистрибутивах и простым поьзователям вроде бы нет.
Вообще-то есть, systemd timers. И systemd рулит как системными процессами, так и пользовательскими.
Здравствуйте, c-smile, Вы писали:
CS>Это для Sciter Notes если что... CS>И я не знаю в каком разделе вопросы по мультиплатформе уместны поэтому задаю здесь.
CS>Делаю scheduled events (планнер событий ?) фичу:
CS>Юзер имеет возможность задать время-дату некоего события — программа должна предупредить перед тем как наступит событие (за сколько — конфигурируемо).
CS>У меня две опции:
CS>1. заставить программу работать в background постоянно и проверять время самому. Но это представляется лишним оверкилом поэтому: CS>2. Использовать что-то типа cron — т.е. просить систему запустить мой exe по наступлению времени. Что явно представляется гуманнее ...
ИМХО, обе опции бесполезны. С одной стороны вероятность того что пользователь отойдет от компьютера в самый нужный
момент и получит напоминание слишком поздно очень велика,
с другой стороны у пользователя с собой есть другой компьютер (на котором в 90% Android/iOS),
который он носит всегда с собой. Поэтому, ИМХО, нужно напоминать пользователю либо с помощью
API календарей, или ставить свое приложение на эти устройства и отправлять им push уведомления.
Здравствуйте, c-smile, Вы писали:
CS>Юзер имеет возможность задать время-дату некоего события — программа должна предупредить перед тем как наступит событие (за сколько — конфигурируемо).
Сейчас на всех платформах есть для этого интерфейс, гуглить можно по словам push notification service. Увы, кроссплатформенного решения не знаю.
CS>b. Существует ли способ разбудить спящую машину
А вот так, пожалуйста не делай, для тех кто так делает есть отдельный котел в аду.
Здравствуйте, m2l, Вы писали:
m2l> CS>2. Использовать что-то типа cron — т.е. просить систему запустить мой exe по наступлению времени. Что явно представляется гуманнее ... m2l> Я может отстал от жизни, но cron — это прерагатива root-а. Не суперпользователь там ничего редактировать не может. И универасльной замены cron-у, доступный по умолчанию в разных дистрибутивах и простым поьзователям вроде бы нет.
Чаго? по умолчанию в этих ваших линухах crontab -e редактирует кронтабу именно для текущаего пользователя.
А чтобы рутовый — надо именно sudo su ; crontab -e
Здравствуйте, MTD, Вы писали:
MTD> CS>b. Существует ли способ разбудить спящую машину MTD> А вот так, пожалуйста не делай, для тех кто так делает есть отдельный котел в аду.
Здравствуйте, Zhendos, Вы писали:
CS>>У меня две опции:
CS>>1. заставить программу работать в background постоянно и проверять время самому. Но это представляется лишним оверкилом поэтому: CS>>2. Использовать что-то типа cron — т.е. просить систему запустить мой exe по наступлению времени. Что явно представляется гуманнее ...
Z>ИМХО, обе опции бесполезны. С одной стороны вероятность того что пользователь отойдет от компьютера в самый нужный Z>момент и получит напоминание слишком поздно очень велика,
У меня немного другой use case. Событие это скажем заметка "затмение солнца [2017-08-21 -1w]"
"service purchased until [2018-08-21 -1m]" т.е. это как правило не на следующий день и не критичные события.
Чего не хочется — требовать у user: дай мне свой username / password для google скажем. Чтобы зайти через его API. И где-то его хранить и пр. головная боль.
Z>с другой стороны у пользователя с собой есть другой компьютер (на котором в 90% Android/iOS), Z>который он носит всегда с собой. Поэтому, ИМХО, нужно напоминать пользователю либо с помощью Z>API календарей, или ставить свое приложение на эти устройства и отправлять им push уведомления.
Опция с сервером понятна и очевидна. Использование CalDAV и все такое.
Здравствуйте, m2l, Вы писали:
m2l>Здравствуйте, c-smile, Вы писали:
CS>>1. заставить программу работать в background постоянно и проверять время самому. Но это представляется лишним оверкилом поэтому: m2l>Вариант самый простой и работоспособный.
Но уж сильно избыточный.
CS>>2. Использовать что-то типа cron — т.е. просить систему запустить мой exe по наступлению времени. Что явно представляется гуманнее ... m2l>Я может отстал от жизни, но cron — это прерагатива root-а. Не суперпользователь там ничего редактировать не может. И универасльной замены cron-у, доступный по умолчанию в разных дистрибутивах и простым поьзователям вроде бы нет.
CS>>a.1 Если "нет" то я правильно ли понимаю что в Windows оно известно как Task Scheduler m2l>Ты уверен, что Task Scheduler может рулить пользователь, которого нет в группе "администраторы"? Не так критично, как с рутом, но неприятно.
И cron и Task Scheduler работают для залогиненого юзера — это не проблема.
CS>>b. Существует ли способ разбудить спящую машину с помощью этих самых cron/schedulers. Или таки мне еще рано хотеть запретного? m2l>По cron точно никак. В остальных случаях это зависит от самой машины, настроек bios, установленных дров и настроек электропитания в ос. m2l>Если в прямую такой задачи нет, то лучше не связываться — работать будет только в ограниченом числе случаев.
Т.е. какой-то механизм есть...
CS>>Ну и вообще я в правильном направлении смотрю или это как-то по другому можно сделать? m2l>Либо основную программу оставляй в фоне. Либо простой демон/служба в сотню килобайт, которые будут waitabled висеть и стартовать её когда надо.
Здравствуйте, DenisCh, Вы писали:
DC>Чаго? по умолчанию в этих ваших линухах crontab -e редактирует кронтабу именно для текущаего пользователя. DC>А чтобы рутовый — надо именно sudo su ; crontab -e
Здравствуйте, c-smile, Вы писали:
CS>А как же это вот: CS>MSDN: Your application can restore a computer that is in a sleep state to the working state by using a scheduled timer or a device event. This is known as a wake-up event. CS>https://msdn.microsoft.com/en-us/library/windows/desktop/aa373235(v=vs.85).aspx
CS>Т.е. какой-то механизм есть...
Он есть, но с подводными камнями:
— должнать быть подержка со стороны bios материнской платы. Технически она есть, но по факту из-за багов может тупо не работать вообще или при определенных условиях (к примеру работать только если был сон или наоборот не срабатывать если была гибернация и т.д.).
— часть bios-ов в настройках имеет параметр, разрешать пробуждение компьютера по таймеру или нет. Как он настроен зависит от производителя, у кого то по умолчанию разрешено, у кого-то нет. Причем есть вариант, когда в настройках его нет и производителем по дефолту выставлен запрет.
— есть косяки в работе между виндой и биосом. В каких-то случаях что бы винда могла вообще установить таймер пробуждения нужны драва к материнке от производителя, которых по дефолту нет (стоят штатные виндовые).
— есть настройки электропитания (к примеру электропитание > дополнительные параметры > сон > разрешить таймеры пробуждения), которые регулируют будут ли устанавливаться или нет эти таймеры.
В итоге получаеться, что механизм есть, но у части пользователей он работать не будет. Насколько это большая часть я не скажу, но случаи будут не единичными.
Здравствуйте, MTD, Вы писали:
MTD>Здравствуйте, c-smile, Вы писали:
CS>>Юзер имеет возможность задать время-дату некоего события — программа должна предупредить перед тем как наступит событие (за сколько — конфигурируемо).
MTD>Сейчас на всех платформах есть для этого интерфейс, гуглить можно по словам push notification service. Увы, кроссплатформенного решения не знаю.
CS>>b. Существует ли способ разбудить спящую машину
MTD>А вот так, пожалуйста не делай, для тех кто так делает есть отдельный котел в аду.
Ты говоришь что будить девайс штатными средствами типа плохо, но с помощью push notification это типа хорошо ...
Так что ли?
А вот как ты думаешь те push notification сделаны физически?
Здравствуйте, MTD, Вы писали:
MTD>Здравствуйте, c-smile, Вы писали:
CS>>Ты говоришь что будить девайс штатными средствами типа плохо, но с помощью push notification это типа хорошо ...
MTD>Да, колхозить всегда плохо, надо использовать то, что предлагает система.
CS>>А вот как ты думаешь те push notification сделаны физически?
MTD>Ты вроде взрослых человек, а обиделся как ребенок, что я восторга от твоей библиотеки не испытываю
Да ну обиделся... нормальная дискуссия, я много почерпнул. Т.е. польза есть.
Просто я не понял что имеется ввиду. Ты мне голову задурил с этим Qt так что я уже подумал что что-то модное про push notification я упустил...
Вот и спросил.
m2l>Я может отстал от жизни, но cron — это прерагатива root-а. Не суперпользователь там ничего редактировать не может.
Никогда такого не было. Любой пользователь может создать crontab файл из которого будут запускаться задачи (с привилегиями создавшего пользователя).
Для крона когда-то была необходимость поместить пользователя в нужную группу, так что, возможно, где-то использовали крон, не помещая по умолчанию пользователя в эту группу (сам я никогда с такими ограничениями не сталкивался).
Я бы для этой задачи разобрался с тем, какие планировщики используются по умолчанию в разных ОС (Lin, Win, Mac) и попробовал использовать их для решения своей задачи.