Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать планировщик? замучался... не получается 
:(
    Опции темы
h2o
Дата 22.11.2005, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Я вообще не понимаю принципа построения планировщика! есть форма, в которой условия планировщика. Всё работает по таймеру. От потока отказался, т.к. надоели ошибки разные и непонятные, которых нет в таймере.

Непонятно, как мне сделать расписание, тоесть по расписанию запускать мою процедуру:
1. ежедневно - DateTimePicker1
2. раз в неделю в определённый день и время - DateTimePicker2
3. раз в месяц в определенный день и время - DateTimePicker3

При запуске проги запускается таймер и он должен проверять время и при достижении нужного запустить мою процедуру. Я НЕ ПОНИМАЮ как сделать условия!!!
Процедура таймера
Код

procedure TSettingsMenu.Timer1Timer(Sender: TObject);
const edtinterval= 24*60*60;
var NowDate, NowTime,ArcDate, ArcTime:TDateTime;
begin
    NowTime:=Now;
    EDayArc:=Now;
    if ((NowTime >= DateTimePicker1.Time)    and
        (LastArcTime < DateTimePicker1.Time)) and
        then
       begin
         LastArcTime := Now;   //глобальная переменная TDateTime
         ProcArchive;  //запуск моей процедуры
         sleep(edtinterval*1000); //ждать 24 часа
       end;


но это неправильно т.к sleep(edtinterval*1000); не должно быть! Нужно проверять условия так
если щас время = времени указанном в планировщике и сегодня ещё процедура не зарускалась, то запустить мою процедуру, потом подождать до завтра 24 часа и опять запустить процедуру мою и так всё время.
А вот как такое реализовать я не понимаю.

ЭТО только 1 пример! а мне надо 3 условия реализовать:
1. ежедневно - DateTimePicker1
2. раз в неделю в определённый день и время - DateTimePicker2
3. раз в месяц в определенный день и время - DateTimePicker3

Помогите!!! smile
З.Ы. smile
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
~FoX~
Дата 22.11.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



А зачем вообще sleep(edtinterval*1000) ?
Можн так Timer1.Interval := (edtinterval*1000);
Можно проверять каждый тик таймера не насталоли время равное указанному в DateTimePicker1..2..3 etc. И если настало, то взводим программу и переставляем дату в пикерах на следующую.
Да вообще полно всего можно придумать.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Alexeis
Дата 22.11.2005, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Неплохо бы вести лог событий которые были уже запущены.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 22.11.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



ну я и говорю, сколько не пробовал, не получается!

люди!!! smile
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Alexeis
Дата 22.11.2005, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Вопрос состоит в том как реализовать
Цитата

если щас время = времени указанном в планировщике и сегодня ещё процедура не зарускалась, то запустить мою процедуру, потом подождать до завтра 24 часа и опять запустить процедуру мою и так всё время.
А вот как такое реализовать я не понимаю.
smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
~FoX~
Дата 22.11.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
  N: TDateTime;
begin
  n := Now;
  if n >= DateTimePicker1.DateTime then begin
    ShowMessage('Пора выполняться');
    DateTimePicker1.Date := Now + 1; //Плюс один день
  end;
end;

Ой, забыл таймер тикает раз в секунду.

Это сообщение отредактировал(а) ~FoX~ - 22.11.2005, 11:43


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Snowy
Дата 22.11.2005, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(h2o @ 22.11.2005, 10:45)
1. ежедневно - DateTimePicker1
2. раз в неделю в определённый день и время - DateTimePicker2
3. раз в месяц в определенный день и время - DateTimePicker3

А зачем изобретать велосипед?
CreateWaitableTimer
Устанавливаешь ему любой DateTime и говоришь "Повторять каждые N времени".

PM MAIL   Вверх
~FoX~
Дата 22.11.2005, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Snowy
А вроде один фиг они оба WM_TIMER ловят?
Хотя я согласен это проще....

Это сообщение отредактировал(а) ~FoX~ - 22.11.2005, 11:54


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Albinos_x
Дата 22.11.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



1. нужно иметь файл, где хранить данные о задании
Например в формате: ( время выполнения, тип выполнения(каждый день, еженедельно...), что делать)
2. желательно создать свою структуру данных, в которую передавать задания ожидающие выполнения
к примеру:
Код

type
TListRun = record
     lrRecBD : word;       // ссылка на задание
     lrTimeS : TDateTime;  // время старта
     end;

 TListRunEx = array of TListRun;

далее необходимо при загрузке создавать список (перебираешь все записи и смотришь время старта, если установленное время больше текущего, то добавляешь в список, а так же проверяешь остальные условия выполнялось не выполнялось, если раз в недёлю, то надо ли добавлять и т.д.)
Код

SetLength(ListRun,Length(ListRun)+1);
ListRun[Length(ListRun)].lrRecBD:=RecNo;    // ссылка на задание
ListRun[Length(ListRun)].lrTimeS:=stdS;      // где stdS время старта

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

if ListRun[Length(ListRun)].lrTimeS=time then ..

такой вариант не прокатит,т.к. допустим у тебя установлено время 12.12.00 ( не буду считать, но для примера это допустим будет равно 0.51222222000000), а компьютер вернёт более точное время, допустим 0.551222222222222211 и вероятность что время совпадёт очень мала, поэтому необходимо или синхронизировать часы программы и часы системы или сравнивать строки:
Код

if TimetoStr(ListN[Length(ListRun)].lrTimeS)=Timetostr(time) then

ещё хочу отметить, что DateTimePicker1.date вернёт значение вместе со временем, поэтому для перестраховки желательно использовать так:
Trunc(DateTimePicker1.date)
то же и со временем:
frac(DateTimePicker1.Time)
Добавлено @ 12:12
да ещё, после выполнения необходима из списка удалять задание
приблизительно так:
Код

// функция удаления из массива данных
procedure DelMasItem(var ListDel:TListRunEx;index:word);
var ListD:TListRunEx;
    i,n:integer;
    by:word;
begin
i:=Length(ListDel);
if i>0 then
   begin
   ListDel[index].lrRecBD:=ListDel[i-1].lrRecBD;
   ListDel[index].lrTimeS:=ListDel[i-1].lrTimeS;
   SetLength(ListDel,i-1);
   end;
end;


ЗЫ: если есть ошибки или недочёты, прошу меня простить... когда писал очень спешил smile

Это сообщение отредактировал(а) Albinos_x - 22.11.2005, 12:14


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Snowy
Дата 22.11.2005, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата
А вроде один фиг они оба WM_TIMER ловят?

Нет, это не юзер-таймер, а таймер объект ядра.
У Рихтера подробно описана работа с ним.
На нем построен стандартный планировщик WinXP.
Кроме того, он может выводить комп из спящего режима.
PM MAIL   Вверх
h2o
Дата 22.11.2005, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Цитата(Snowy @ 22.11.2005, 11:45)
CreateWaitableTimer
Впервые слышу. Буду пробовать!



Цитата
код Pascal/Delphi
Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
  N: TDateTime;
begin
  n := Now;
  if n >= DateTimePicker1.DateTime then begin
    ShowMessage('Пора выполняться');
    DateTimePicker1.Date := Now + 1; //Плюс один день
  end;
end;


Ой, забыл таймер тикает раз в секунду.

DateTimePicker1.Date := Now + 1; //Плюс один день - а тут как надо? Что вместо +1?
Вот так:? DateTimePicker1.Date := Now + 24часа*60минут*60секунд?

Добавлено @ 13:04
Albinos_x принял к сведению! но у меня более тупо реализовано! хотя...
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
h2o
Дата 22.11.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Snowy А где его создавать? Как с ним работать? когда включать/выключать? и т.д.?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Snowy
Дата 22.11.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(h2o @ 22.11.2005, 13:18)
Snowy А где его создавать? Как с ним работать? когда включать/выключать? и т.д.?

Я же сказал - у Рихтера все подробно расписано.
Найди в инете книгу:
"Джефри Рихрер - Создание эффективных WIN32-приложений" в chm формате.
Не раз еще пригодится. Это Библия WinAPI программиста.
Про таймеры читай в главе 9.
PM MAIL   Вверх
FRAGNATIC
Дата 22.11.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: 6
Всего: 11



ещё SetTimer мона =)
PM MAIL   Вверх
Albinos_x
Дата 22.11.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Код

 DateTimePicker1.Date:=date+1;

1 - одни сутки.
Цитата
Вот так:? DateTimePicker1.Date := Now + 24часа*60минут*60секунд

чтобы добавить время желательно использовать EncodeTime
пример:
Код

 Label1.caption:=datetimetostr(date+EncodeTime(1,0,0,0)*5+EncodeTime(0,1,0,0)*30+EncodeTime(0,0,1,0)*20;

где 5 -часы - 30 - минуты - 20 - секунды


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
h2o
Дата 23.11.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



А как быть с днями недели, например если указанно, что нужно запустить мою процедуру в пятницу 13го числа в 14:00?

как сделать дни недели?
Добавлено @ 12:04
Цитата(Snowy @ 22.11.2005, 13:26)
Я же сказал - у Рихтера все подробно расписано.
Найди в инете книгу:
"Джефри Рихрер - Создание эффективных WIN32-приложений" в chm формате.
Не раз еще пригодится. Это Библия WinAPI программиста.
Про таймеры читай в главе 9.


ага! была бы ещё она на делфи! на С++ я не шарю вообще!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Alexeis
Дата 23.11.2005, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Вот пример с сайта delphiword
Код

uses SysUtils;
...

function TForm1.DayOfWeekRus(S: TDateTime): string;
begin
  case DayOfWeek(S) of
    1: Result := 'Воскресенье';
    2: Result := 'Понедельник';
    3: Result := 'Вторник';
    4: Result := 'Среда';
    5: Result := 'Четверг';
    6: Result := 'Пятница';
    7: Result := 'Суббота';
  end;
end;





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 23.11.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



а как с CreateWaitableTimer в Делфи работать?
где запускать, как что там вообще делать?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Alexeis
Дата 23.11.2005, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 25.11.2005, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Дак я читал уже! Всё равно не понял! я и пример для Делфи в инете не нашёл!!! Там вообще примеров нет, а если и встречаются, то на С++. Может у кого примерчик есть?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
h2o
Дата 25.11.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



упс! нашёл:
Код

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Класс-оболочка для объекта синхронизации WaitableTimer.

Класс представляет собой оболочку для объекта синхронизации WaitableTimer,
существующего в операционных системах, основанных на ядре WinNT.

Методы.
--------------
Start - запуск таймера.

Stop - остановка таймера.

Wait - ожидает срабатывания таймера заданное количество миллисекунд и
возвращает результат ожидания.

Свойства.
--------------
Time : TDateTime - дата/время когда должен сработать таймер.

Period : integer - Период срабатывания таймера. Если значение равно 0, то
таймер срабатывает один раз, если же значение отлично от нуля, таймер будет
срабатывать периодически с заданным интервалом, первое срабытывание произойдет
в момент, заданный свойством Time.

LongTime : int64 - альтернативный способ задания времени срабатывания. Время
задается в формате UTC.

Handle : THandle (только чтение) - хендл обекта синхронизации.

LastError : integer (только чтение) - В случае если метод Wait возвращает
wrError, это свойство содержит значение, возвращаемое функцией GetLastError.

Зависимости: Windows, SysUtils, SyncObjs
Автор:       vuk
Copyright:   Алексей Вуколов
Дата:        25 апреля 2002 г.
***************************************************** }

unit wtimer;

interface

uses
  Windows, SysUtils, SyncObjs;

type

  TWaitableTimer = class(TSynchroObject)
  protected
    FHandle: THandle;
    FPeriod: longint;
    FDueTime: TDateTime;
    FLastError: Integer;
    FLongTime: int64;
  public

    constructor Create(ManualReset: boolean;
      TimerAttributes: PSecurityAttributes; const Name: string);
    destructor Destroy; override;

    procedure Start;
    procedure Stop;
    function Wait(Timeout: longint): TWaitResult;

    property Handle: THandle read FHandle;
    property LastError: integer read FLastError;
    property Period: integer read FPeriod write FPeriod;
    property Time: TDateTime read FDueTime write FDueTime;
    property LongTime: int64 read FLongTime write FLongTime;

  end;

implementation

{ TWaitableTimer }

constructor TWaitableTimer.Create(ManualReset: boolean;
  TimerAttributes: PSecurityAttributes; const Name: string);
var
  pName: PChar;
begin
  inherited Create;
  if Name = '' then
    pName := nil
  else
    pName := PChar(Name);
  FHandle := CreateWaitableTimer(TimerAttributes, ManualReset, pName);
end;

destructor TWaitableTimer.Destroy;
begin
  CloseHandle(FHandle);
  inherited Destroy;
end;

procedure TWaitableTimer.Start;
var
  SysTime: TSystemTime;
  LocalTime, UTCTime: FileTime;
  Value: int64 absolute UTCTime;

begin
  if FLongTime = 0 then
  begin
    DateTimeToSystemTime(FDueTime, SysTime);
    SystemTimeToFileTime(SysTime, LocalTime);
    LocalFileTimeToFileTime(LocalTime, UTCTime);
  end
  else
    Value := FLongTime;
  SetWaitableTimer(FHandle, Value, FPeriod, nil, nil, false);
end;

procedure TWaitableTimer.Stop;
begin
  CancelWaitableTimer(FHandle);
end;

function TWaitableTimer.Wait(Timeout: Integer): TWaitResult;
begin
  case WaitForSingleObjectEx(Handle, Timeout, BOOL(1)) of
    WAIT_ABANDONED: Result := wrAbandoned;
    WAIT_OBJECT_0: Result := wrSignaled;
    WAIT_TIMEOUT: Result := wrTimeout;
    WAIT_FAILED:
      begin
        Result := wrError;
        FLastError := GetLastError;
      end;
  else
    Result := wrError;
  end;
end;

end.
Пример использования: 

// Пример создания таймера, который срабатывает по алгоритму "завтра в это же
// время и далее с интервалом в одну минуту".

var
  Timer: TWaitableTimer;
begin
  Timer := TWaitableTimer.Create(false, nil, '');
  Timer.Time := Now + 1; //завтра в это же время
  Timer.Period := 60 * 1000; //Интервал в 1 минуту
  Timer.Start; //запуск таймера
end;


теперь непонятно ГДЕ его запускать, ГДЕ Останавливать и ГДЕ указать свою процедуру выполнить, когда он сработатет?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Snowy
Дата 25.11.2005, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Ну вот чисто для теста накатал:
Код

program Project1;

uses
  Windows, SysUtils, wtimer, SyncObjs;

var
  Timer: TWaitableTimer;


begin
  Timer := TWaitableTimer.Create(false, nil, 'MyCoolTimer'); // Создали таймер с именем MyCoolTimer
  Timer.Time := Now + StrToTime('00:00:03'); // Время первого срабатывания через 3 секунды
  // можно записать сюда любой TDateTime

  Timer.Period := 5000; // после первого срабатывания, срабатывать каждые 5 секунд
  Timer.Start; // Запускаем таймер
  repeat // это общий цикл
    repeat // это цикл до срабатывания таймера
      if Timer.Wait(1000) = wrSignaled then // Ждем ответа от таймера в течении секунды
      begin // если таймер сработал
        MessageBox(0,'Кря-кря!','Таймер', MB_OK); // кричим Кря-Кря или на свое усмотрение
      end
      else // если не сработал, то делаем что-нибудь
        // например, если бы пример был с формой, то нужно делать:
        // Application.ProcessMessages
        ;
    until false; // в примере цикл крутит, пока не сработает таймер
  until false; // в примере цикл крутит вечно
end.


Добавлено @ 18:05
P.S. Это пример. Он не вырубается.
Бырубаем через дельфи по Ctrl+F2 или диспетчер задач.
PM MAIL   Вверх
h2o
Дата 28.11.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



if Timer.Wait(1000) = wrSignaled then // Ждем ответа от таймера в течении секунды

на эту строку ругается, типа "[Error] Unit1.pas(789): Undeclared identifier: 'wrSignaled'"
и чё делать?
Добавлено @ 12:19
ой! голова моя дырявая, разобрался!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
sexton
Дата 28.11.2005, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: 1
Всего: 9



Может и не в тему, но советую посмотреть компоненты для планировщиков от TMS (www.tmssoftware.com)
PM MAIL WWW ICQ   Вверх
h2o
Дата 29.11.2005, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Snowy а как его хоть останавливать?никак не могу. всё время ошибки возникают...
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Romikgy
Дата 29.11.2005, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Код

Timer.Stop;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
h2o
Дата 29.11.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



а точно! не работало из-за неправильно организованного цикла! я ступил!

--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Демо
Дата 29.11.2005, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



А почему ты не хочешь свой планировщик в виде сервиса оформить?
По-моему так будет логичнее.


--------------------
    
PM MAIL ICQ Skype   Вверх
h2o
Дата 30.11.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



у меня не совсем планировщик, и он с формой! так, что сервис отпадает! блин! я уже вообще его замучился делать! нифига не получается!

Вообще мне нужно, по условиям времени... заданых юзеров запускать 1 процедуру. тоесть есть варианты:
1. на определенный день в определенное время
2. автоматом каждый день
3. автоматом раз в неделю
4. автоматом раз в месяц

Я пробовал делать с помощью:
1. Потока (там ошибки, зависоны), отказался от него
2. С помощью таймера (тока 1е условие реализовал, остальные не получилось)
3. С помощью WaitAbleTimer (может я там что-то и не правильно делал, но тоже не получилось)

Вообщем я просто опустил руки! я непонимаю как можно реализовать условия выше.

Я уже и здесь вопросы задавал и мне помогали, но так и не разобрался! smile

А всего-то, нужно:
1. на определенный день в определенное время - если дата и время сейчас >= указанной дате и времени, то запускаем процедуру, если нет ждём 5 сек и т.д
2. автоматом каждый день - если сегодня процедура в такое-то время ещё не запускалась, тогда
запускаем, если время не подошло ждем, а если запускалась, то нужно завтро и в последущие дни тоже самое делать.
3. тоже самое но не каждый день а раз в неделю (в месяц)! и т.д

Я не смог правильно сделать проверку условия, а если сделать, тогда хоть всеми способами можно будет реализовать!

вот такой вот я стопор!

если кто-хоть когда-нибудь это делал, дайте приерчик!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Демо
Дата 30.11.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Может всё обсудим снова?

1. Зачем тебе форма?


--------------------
    
PM MAIL ICQ Skype   Вверх
h2o
Дата 30.11.2005, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



1. указывать все настройки (их туча!!!)
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Демо
Дата 30.11.2005, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(h2o @ 30.11.2005, 13:55)
1. указывать все настройки (их туча!!!)


Так можно отделить мух от котлет;)

Сервис занимается тем, что по расписанию выполняет свои задачи, а отдельное приложение используется для настроек.

Как тебе такой вариант?


--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 30.11.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 30.11.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



по началу я тоже так хотел, но: я неумею писать сервисов и вряд ли разберусь! (хотя это вообще был бы идеальный вариант, т.к. юзер бы вообще ничего не видел.)
Я думал, и мне больше по душе понравился вариант форма+трэй+поток+автозапуск проги при загрузке винды!
Прога висит в трее, а поток (hThread или Таймер или WaitAbleTimer) сверяет настройки и запускает процедуру!

Самое сложное- это то что я не понимаю как реализовать проверку расписания. При запуске проги она загружает из ИНИ настройки все, при закрытии записывает. Далее из формы из ее VCL компонентов берутся настройки расписания, сравниваются и если совпало-то запускается моя процедура! А вот как проверку этих условий реализовать? Вот вся проблема?
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Демо
Дата 30.11.2005, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(h2o @ 30.11.2005, 14:07)
по началу я тоже так хотел, но: я неумею писать сервисов и вряд ли разберусь!


Это просто. Свой первый сервис я написал, просто взяв его из справки и разобравшись.


--------------------
    
PM MAIL ICQ Skype   Вверх
Farnsworth
Дата 30.11.2005, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.11.2005

Репутация: нет
Всего: нет



Цитата
DateTimePicker1.Date := Now + 1; //Плюс один день - а тут как надо? Что вместо +1?
Вот так:? DateTimePicker1.Date := Now + 24часа*60минут*60секунд?

+1 - это и значит добавить один день.
Если тебе нужно добавить 1 час, то нужно сделать +1/24.
Если одну минуту: +1/24/60.
Понятно? Переменная TDateTime - это число, равное количеству дней, прошедших с 30.12.1899 (в Delphi). Если прошло пол дня, значит значение 0.5.

Цитата
такой вариант не прокатит,т.к. допустим у тебя установлено время 12.12.00 ( не буду считать, но для примера это допустим будет равно 0.51222222000000), а компьютер вернёт более точное время, допустим 0.551222222222222211 и вероятность что время совпадёт очень мала, поэтому необходимо или синхронизировать часы программы и часы системы или сравнивать строки

"Равно" конечно сравнивать нельзя, но достаточно сравнить с интервалом, равным, скажем, двум интервалам таймера (с запасом):
Код
if (ListRun[Length(ListRun)].lrTimeS<=time+Timer1.Enterval/1000/60/60/24) and (ListRun[Length(ListRun)].lrTimeS>=time-Timer1.Enterval/1000/60/60/24) then

PM MAIL   Вверх
Демо
Дата 30.11.2005, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



h2o

Если хочешь, давай вместе напишем каркас планировщика.
В случае согласия в PM дам координаты для связи.


--------------------
    
PM MAIL ICQ Skype   Вверх
h2o
Дата 30.11.2005, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Farnsworth Вот ты написал что надо так:
Код

if (ListRun[Length(ListRun)].lrTimeS<=time+Timer1.Enterval/1000/60/60/24) and (ListRun[Length(ListRun)].lrTimeS>=time-Timer1.Enterval/1000/60/60/24) then

А я сравнивал даты! значения дат в любом случае должны совпадать, поэтому сравнение по "=" - допустимо. А вот время я сравнивал условием ">=", что должо было работать! а не работало! попробую с сравнением которое ты написал!

суть то в том что непонятно как реализовать саму процедуру проверки расписания (тоесть процедуру сравнения вемени)
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Farnsworth
Дата 1.12.2005, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.11.2005

Репутация: нет
Всего: нет



1. Когда-то я заметил, что DataTimePicker возвращает не только дату, но и время. Так что дату, полученную от DateTimePicker нужно приводить к 00 часам 00 минутам, то есть Date1:=int(DateTimePicker1.Date);

2. Точно не помню, но кажется функция Date тоже дает не 00 часов 00 минут, так что и её результат тоже нужно округлять: Date2:=int(Date);

3. В первом приведенном тобою коде ты использовал функцию Now - он тем-более даёт и дату и время, так что: Date3:=int(Now);

4. И вот тогда ты можешь сравнивать даты по "=".

5. Насчёт процедуры проверки времени - если у тебя проверка запуска по расписанию стоит в обработчике таймера, то достаточно использовать то, что я тебе написал выше. Кстати лучше даже сделать так:
Код
f (ListRun[Length(ListRun)].lrTimeS<=time+Timer1.Enterval*2/1000/60/60/24) and (ListRun[Length(ListRun)].lrTimeS>=time-Timer1.Enterval/1000/60/60/24) then

Добавилось "*2". Винда тормозит, и таймер может сработать не через 1000 милисекунд, а 1500 или даже намного больше (например, при чтении дискеты или сбойного CD-ROM'а). Лучше интервал самого таймера поставить 10 или 20 секунд (зачем каждую секунду-то проверять, винду нагружать?).

6. Не забудь, что если у твоей программы-планировщика есть возможность что-то запускать с периодом в 1 сутки, то нужно предусмотреть такой вариант, что, к примеру, твою программу (или саму Виндоуз, если твоя программа в авто-загрузчике будет прописана) могут запустить чуть позже срока срабатывания одного из ежедневных событий, например с опозданием на 1 минуту, и тогда это событие уже никогда не произойдет. Так что в случае ежедневных заданий их нужно проверять if DailySheduledTime<=Now then begin {обработчик ежедневного события}; DailySheduledTime:=Now+1; end;. Этот пример тебе уже приводил ~FoX~.

7. Если в твоей программе есть возможность установить событие на какое-то определенное время, то по той-же причине, что и в пункте 6, оно может не сработать из-за опоздания запуска программы всего лишь в 1 минуту. По-этому в модуль запуска программы лучше поставить ещё одну процедуру проверки этих событий, но проверять уже с интервалом в, скажем, 10 минут (или лучше пускай этот "запас" устанавливает сам пользователь в "Дополнительных (advanced) настройках" каких-нибудь):
Код
if (ListRun[Length(ListRun)].lrTimeS<=time+(DeltaTimeInMinutes/24/60) then

PM MAIL   Вверх
Albinos_x
Дата 1.12.2005, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(Farnsworth @ 1.12.2005, 06:17)
2. Точно не помню, но кажется функция Date тоже дает не 00 часов 00 минут, так что и её результат тоже нужно округлять: Date2:=int(Date);

не Date возвращяет чистую дату...

Цитата(Farnsworth @ 1.12.2005, 06:17)
1. Когда-то я заметил, что DataTimePicker возвращает не только дату, но и время. Так что дату, полученную от DateTimePicker нужно приводить к 00 часам 00 минутам, то есть Date1:=int(DateTimePicker1.Date);

про это я писал в начале...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 1.12.2005, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(Farnsworth @ 1.12.2005, 06:17)
Добавилось "*2". Винда тормозит, и таймер может сработать не через 1000 милисекунд, а 1500 или даже намного больше (например, при чтении дискеты или сбойного CD-ROM'а). Лучше интервал самого таймера поставить 10 или 20 секунд (зачем каждую секунду-то проверять, винду нагружать?).

если делать сравнение:
Цитата(h2o @ 30.11.2005, 16:35)
А вот время я сравнивал условием ">=", что

то всё расно сработает, но в этом случае сразу после срабатывания необходимо удалять задание из списка ожидания, иначе будет постоянно выполняться.... можно конечно добавить ещё к записи признак выполнялось/невыполнялось... но это имхо не эффективно...
а вот:
Цитата(h2o @ 30.11.2005, 16:35)
должо было работать! а не работало!

эт странно... попробуй в пошаговом режиме посмотреть какие данные она возвращяет и найти ошибку
Цитата(Farnsworth @ 1.12.2005, 06:17)
6. Не забудь, что если у твоей программы-планировщика есть возможность что-то запускать с периодом в 1 сутки, то нужно предусмотреть такой вариант, что, к примеру, твою программу (или саму Виндоуз, если твоя программа в авто-загрузчике будет прописана) могут запустить чуть позже срока срабатывания одного из ежедневных событий, например с опозданием на 1 минуту, и тогда это событие уже никогда не произойдет.

эт в принципе не нужно... хотя в проге можно предусмотреть вариант с настройкой проги... допутим напоминать выполненые задания... и при загрузке проги проверять какие сегодня должны были выполниться задания и отображать список...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Alexeis
Дата 1.12.2005, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



h2o я набросал каркас планировщика без таймера, со вторым
потоком. Проект сырой - нет отображения, загрузки и сохранения
заданий и еще много чего но вроде то что просил...

http://alexei-s1.narod.ru/Sheduler.rar




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 1.12.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



alexeis1 ругается на RecodeMilliSecond(tt, 0);
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Alexeis
Дата 1.12.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



h2o на остальные не ругается?
(не могу сам проверить на работе нет палитры Samples)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 1.12.2005, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



вообщем, когда указываю все настройки, указываю ехе, нажимаю ОК, он говорит "invalid float point" и показывает в Delphi на эту строку, я может неправильно ввожу что?
Добавлено @ 11:38
и это происходит токо когда ехе указываю. у меня в поле едит ничё не выводится...
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
h2o
Дата 1.12.2005, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Нашел в чем ошибка! у тебя там переменная tt не инициализирована была. Теперь работает! вот только я ему указал запустить прогу, а он мне её раз 20 запустил (20 экземпляров), он ее запускал пока я не вырубил всё ресетом в делфе
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Alexeis
Дата 1.12.2005, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Дело в том что эту часть проекта вчера просто не успел отладить
долго мучал потоки так что попробую исправить ошибки (вероятно есть)

если можешь пришли файлик samples.bpl
Добавлено @ 12:03
еше в Procedure TWorkThread.test;
надо строчку заменить на
pNone : incYear(ShEvents[i].Next, 100);

Цитата
tt не инициализирована

как инициализировал?

Это сообщение отредактировал(а) alexeis1 - 1.12.2005, 12:13


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 1.12.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



Код

if Calendar1.Visible
      then
        t.day := Calendar1.Day;

      [b]tt:=Now;[/b] //ну или занулить, ну вообщем нельзя неинициализированными переменные оставлять перед их использованием, из-за этого глюки бывают!

      RecodeMilliSecond(tt, 00);
      RecodeSecond     (tt, 00);
      RecodeMinute     (tt, t.min);
      Recodehour       (tt, t.hour);
      RecodeDay        (tt, t.Day);
      RecodeMonth      (tt, t.month);
      RecodeYear       (tt, t.Year);

--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Alexeis
Дата 1.12.2005, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата
вот только я ему указал запустить прогу, а он мне её раз 20 запустил (20 экземпляров

Я думаю что ошибка в установке даты

ShEvents[Length(ShEvents) - 1].Next

нашел ошибку
Код


 Procedure TWorkThread.test;
 var
   i : integer;
   d : TDT;
   t : TDateTime;
   s1, s2 : Ansistring;
 Begin
   d := GetCurrentDateTime;
   with form1
   do
     Begin
       For i := 0 to High(ShEvents)
       do
         Begin
           DateTimeToString(s1,'yyyy/mm/dd/hh/nn', d.Standart);
           DateTimeToString(s2,'yyyy/mm/dd/hh/nn', ShEvents[i].Next);
           if s1 > s2
           then
             Begin
               ShellExecute(Handle, nil, PChar(ShEvents[i].StarAp),
                             nil, nil, SW_SHOW);

               t := ShEvents[i].Next;
               Case ShEvents[i].Period of
                 pNone : t := incYear(t, 100); //вот так верно
                 pHour : t := incHour(t, 1);
                 pDay  : t := incDay (t, 1);
                 pWeek : t := incWeek(t, 1);
                 pMonth: t := incMonth(t, 1);
                 pYear : t := incYear(t, 1);
               end;
              ShEvents[i].Next := t;
             end;
         end;
     end;
 end;



Это сообщение отредактировал(а) alexeis1 - 1.12.2005, 13:37


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 2.12.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



h2o
Вот новый переработанный и улучшенный вариан планировщика
Это еще не готовая программа но вроде отладил...

http://alexei-s1.narod.ru/Sheduler.rar smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 2.12.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



и опять переменная tt не инициализированна! опять ошибка как в прошлый раз! неужели у тебя всё без ошибки проходит?

Ну остальное работате! смотрю дальше... спасибо
Добавлено @ 13:15
он за 2 минуты 4 раза мне прогу запустил, с интервалом в 30 секунд примерно!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Alexeis
Дата 2.12.2005, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



а это и не требуется

tt := RecodeDateTime(tt, t.Year, t.month,
t.Day, t.hour, t.min, 0, 0);

и есть инициализация

Добавлено @ 13:39
3 минуты полет нормальный - один запуск (по расписанию)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 2.12.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



5 минут полет нормальный - один запуск (по расписанию)
перевожу стрелки часов на час вперед второй запуск

попробуй компилировать в Delphi 7, Delphi 2005

все покидаю форум буду во вторник

Это сообщение отредактировал(а) alexeis1 - 2.12.2005, 13:59


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
h2o
Дата 9.12.2005, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 19.8.2005

Репутация: 1
Всего: 1



долбил, долбил, а он всё равно запускает много экземпляров указанной проги запускать! я на выходных дома попробую откомпелировать!
--------------------
Я нифига не знаю! мало что понимаю! Помогите тупому... У меня стоит D7!
PM MAIL   Вверх
Albinos_x
Дата 9.12.2005, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(h2o @ 9.12.2005, 09:10)
он всё равно запускает много экземпляров указанной проги запускать!

видно стирать задание забываешь...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Alexeis
Дата 9.12.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата
видно стирать задание забываешь...

Правельно прога то недоделанная! удали ini файл и попробуй
снова по порядку (так как я писал в email - e)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2302 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.