Мое приложение находится в системном лотке, когда это не используется.
Пользователь может настроить события для появления в конкретном расписании. Например, они могут путь задача, выполненная с понедельника по пятницу в 17:00 или каждую среду в 15:00 или на 16-м из каждого месяца в 10:00.
Принятие моей программы Дельфи всегда работает, это запускается при начальной загрузке, каков лучший способ в Дельфи для поддержки инициирования этих запланированных событий.
Очевидно, TTimer может использоваться для планирования событий на основе прошедшего времени, но они не кажутся подходящий для этой проблемы.
Удачи
Вы можете использовать мою CRON SCROMIS PROPULER . Это даже поддерживает некоторые вещи, которые Cron нет. Интервальные события, например, и от / до таймфрейма. Я использую его во многих моего программного обеспечения, и он доказал себя довольно полезным. Это свободный, очень легкий, работает в потоках и проходит производство. Если вам нужна дополнительная помощь, просто послать меня.
Другие способы:
MVVM - это просто шаблон дизайна . Вам не нужно это, если вам не комфортно с WPF. Если вы изучаете WPF, я предлагаю вам сначала завершить книгу, а затем узнать о MVVM. Если вы попробуете изучить обоих, вы бы попытались реализовать MVVM в каждом простом приложении WPF или не понимаю некоторую функцию WPF, что использует MVVM.
P.S: Я пришел к этому выводу, когда я столкнулся с проблемой. Я до сих пор не понимаю, как ViewModel может создать новый вид, если он ничего не знает об этом.
-121--2476966-Я бы использовал API планировщика задач Microsoft для этого:
http://msdn.microsoft.com/en-us/library/aa383614 (vs.85) .aspx
Есть Delphi Wrappers для API, если вы не хотите делать «грязную работу», но я не знаю, есть ли свободный. Возможно, вы посмотрите на
Если вы не Хотите использовать Microsoft Scheduler, есть такие вещи, как компонент Cronjob, доступный здесь: http://www.appcontrols.com/components.html . Это условно известно, но легко реализовать (просто событие OnaLert).
Вы можете реализовать какую-то взаимосвязь в вашей программе и вызвать эти события через IPC по программе, называемой службой планирования Windows. Этот подход имеет то преимущество, что вам не нужно писать пользовательский интерфейс для настройки расписания, а также, что IPC может оказаться полезным другими способами.
Я не включаю основной класс или не строю основную библиотеку или что-либо из этого.
да, вы:
проблемы обработки «javax/xml/XMLConstants.class»
java. * и javax. * Оба числа. вы можете использовать переключатель --core-library, если хотите проигнорировать это в тестовом приложении, но обратите внимание на предупреждение: "ваше приложение все равно не сможет построить или запустить, в какой-то момент. Пожалуйста, будьте готовы к сердитым клиентам, которые обнаружат, например, что ваше приложение перестает работать после обновления операционной системы. Вы будете виноваты в этой проблеме. "
Правильное исправление, как говорится, для приложения доставки, состоит в том, чтобы переупаковать эти классы (т.е. переместить их в новый каталог, соответствующим образом отредактировать их" упаковочные "строки и обновить" импортные "строки в их вызывающих).
-121--2159438-Я тестирую API REST в данный момент и нашел REST Client очень хорошим. Это программа GUI, но, тем не менее, можно сохранять и восстанавливать запросы в виде XML-файлов (или разрешать их создание), встраивать, писать тестовые сценарии и т.д. И это на основе Java (что не является случайным преимуществом, но вы упомянули об этом).
Минус точек для сеансов записи. Клиент REST хорошо подходит для безгражданства.
Если это не соответствует вашим потребностям, я бы пошел на уже упомянутую механизацию (или WWW-Mechanize , как это называется в CPAN).
-121--3432336-Поскольку приложение запущено, можно использовать событие простоя для проверки того, истекла ли уже установленная дата/время, и если да, то для выполнения синхронизации. Единственным побочным эффектом этого подхода является то, что ваше событие не будет инициировано, если приложение занято, но не будет таймер (для работы TTimer очередь сообщений должна быть обработана, или приложение должно быть «Неактивно», если вы не используете многопоточный таймер).
uses
...,DateUtils; // contains IncMinute
type
TForm1 = Class(TForm)
:
procedure FormCreate(Sender: TObject);
private
fTargetDate : tDateTime;
procedure AppIdle(Sender: TObject; var Done: Boolean);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fTargetDate := 0.0;
Application.OnIdle := AppIdle;
fTargetDate := IncMinute(Now,2);
end;
procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
if (fTargetDate <> 0.0) and (Now >= fTargetDate) then
begin
fTargetDate := 0.0;
ShowMessage('started');
end;
end;
EDIT Если требуется выполнить что-либо несколько раз, поместите их в упорядоченный список по дате/времени, а затем отслеживайте только СЛЕДУЮЩЕЕ время выполнения. При выполнении какой-либо операции она удаляется для списка (или переносится обратно в список и список пересортировывается).
Другим вариантом было бы создание TThread, выполняющего управление таймером:
type
TestThreadMsg = class(tThread)
private
fTargetDate : tDateTime;
fMsg : Cardinal;
protected
procedure Execute; override;
procedure NotifyApp;
public
constructor Create( TargetDate : TDateTime; Msg:Cardinal);
end;
implementation:
constructor TestThreadMsg.Create(TargetDate: TDateTime; Msg: Cardinal);
begin
inherited Create(True);
FreeOnTerminate := true;
fTargetDate := TargetDate;
fMsg := Msg;
Suspended := false;
end;
procedure TestThreadMsg.Execute;
begin
Repeat
if Terminated then exit;
if Now >= fTargetDate then
begin
Synchronize(NotifyApp);
exit;
end;
Sleep(1000); // sleep for 1 second, resoultion = seconds
Until false;
end;
procedure TestThreadMsg.NotifyApp;
begin
SendMessage(Application.MainForm.Handle,fMsg,0,0);
end;
, который затем можно подключить к основной форме:
const
WM_TestTime = WM_USER + 1;
TForm1 = Class(TForm)
:
procedure FormCreate(Sender: TObject);
procedure WMTestTime(var Msg:tMessage); message WM_TestTime;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TestThreadMsg.Create(IncSecond(Now,5),WM_TestTime);
end;
procedure TForm1.WMTestTime(var Msg: tMessage);
begin
ShowMessage('Event from Thread');
end;
Это должно быть сделано:
list($d, $m, $y) = explode('/', $datedue);
$billdate = date('Y-m-d', mktime(0,0,0,$m,$d,$y);
Или это может быть без функций даты, как Гумбо предложил:
list($d, $m, $y) = explode('/', $datedue);
$billdate = "$y-$m-$d";
Я бы рекомендовал использовать дату
, хотя если вы подозреваете, что вам нужно изменить формат в будущем. Нет необходимости использовать регулярное выражение для такого простого разделения. В этом случае взрыв будет намного быстрее.
Функции регулярного выражения ereg _
устарели как функции PHP 5,3,0 и будут удалены в PHP 6. Для регулярных выражений используйте функции preg _
.
О скрытии ошибки; никогда не следует скрывать уведомления при разработке, поскольку они помогают создать лучший код. Без этого уведомления вы бы с радостью использовали ereg
, и ваше приложение ужасно сломалось бы при обновлении сервера до PHP 6. Однако можно управлять количеством отображаемых ошибок с помощью error _ reporting () . Отключение error_reporting при переходе к продуктивной эксплуатации сайта может быть хорошей идеей.
BTW, начинайте принимать некоторые ответы, если вы считаете их полезными.
-121--4104041-Вам не нужно делать ничего особенного для последовательности. Последовательности Perl по умолчанию UTF-8, начиная с Perl 5.8.
perl -CO -le 'print "\x{2603}"' | xargs perl -le 'print "I saw @ARGV"'
Вышеприведенный код отлично работает на Ubuntu 9.04, OS X 10.6 и FreeBSD 7.
Команда VinylShrub показывает хорошую точку, Мы видим определенное различие между
perl -Mutf8 -wle ';print utf8::is_utf8($ARGV[0]) ? "t" : "f"' a
и
perl -Mutf8 -CA -wle ';print utf8::is_utf8($ARGV[0]) ? "t" : "f"' a
-121--2307582- Вам нужен компонент планирования. Есть много доступных , однако я, кажется, не могу найти никакого свободного. Вы всегда можете создать его самостоятельно, на основе TTimer, или попытаться получить доступ к API планирования задач .
Однако , наличие таймера, который выполняет задачу каждую минуту, чтобы проверить, должна ли задача, намного проще .