Как бы сделать шедулер...

Тема в разделе "WASM.WIN32", создана пользователем Fallout, 13 апр 2005.

  1. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Есть идея сделать шедулер с точностью до день час минута секунда ... мм вот только нехочется перебирать все задачи и сранвивать время каждую секунду... можно сделать например так ужать время в 2 байта... учитывая время не 24 часа а 12 =)



    4бит на час (0 - 12)

    6бит на минуты (0 - 59)

    6бит на секунды (0 - 59)



    итого можно значит создать lookup таблицу размером всего 65кб... и сооственно будет гораздо проще сразу вявлять то задание что должно сработать +) или может есть способы проще?... понятно что перебирать даже 1000 заданий можно и за секунду... но... не красиво
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Манипуляции с битами, таблица на 65кб... и чем это должно быть проще, зачем точность до секунды (ты уверен что сможешь правильно обеспечить выполнение задания если не получишь процессорного времени несколько секунд)? Для 1000 заданий, достаточно 1кб, ставь таймер на минуту и сравнивай двордами
     
  3. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Да я так и делал дворды сравнивал и всё... ну впринцыпи да... ты прав.. зачем с точностью до секунды... прсото малоли думал ... как нить красиво сделать +)
     
  4. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    хотяяяя +):

    3 байта на день недели

    5 байт на 24 часа....

    6 байт на минуты...



    тогда делаем лукап таблицу +) туда кидаем адрес функции что надо вызывать ии...

    call lookup[time] +)



    ну само собой првоерить не нуль ли там адрес функции...

    хотя если задание разные а выполняться должны в одно время ...мм ну ладно всё таки перебор
     
  5. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    не байт а бит +)
     
  6. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    не байт а бит +)
     
  7. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    А зачем так сложно извращаться? Не проще ли упорядочить все задания по времени и хранить в качестве момента срабатывания для каждой задачи номер секунды начиная с некоторого момента. Тогда "поиск" сведется к перемещению указателя на следующую позицию в массиве. Правда процедура вычисления времени следующего несколько усложнится (нужно будет выполнять вставку в массив двойных слов), но это скорее всего будет быстрее, чем просто каждый раз бегать по всему массиву.
     
  8. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Да была и такая идея.. но вначале надо вычеслить правильные значения до времени Х.... ммм... вот и думаю как бы лучше...
     
  9. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    это делается один раз при добавлении/удалении задачи. Зато потом тривиально Sleep(time); Exec(task); ++i;
     
  10. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    я понимаю.. что тревиально .. имеем конечную дату и начальную.. 1 класс... я не про то... хм... прсото как бы пооптимальнее... пока вижу только два... этот и тупо проходить и сравнивать дворды... +)
     
  11. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Тупо сравнивать дворды тоже нельзя, даже точность до минуты иногда можно не выполнить, допустим, есть у тебя задание запустить 2 проги в 18.00 и 18.01:



    Комп подключен к сети, в 17.59 вырубили сервер, в 18.00 ты делаешь CreateProcess, винда начинает искать %PATH%, ждет х.з. сколько минут пока не выйдет таймаут опроса сервера, 18.02 ура таймаут вышел прога запущена, дальше сравниваем 18.02 и 18.01 не совпадает, результат 2-я прога не запущена



    Есс-но это все грубо говоря, надо тестировать и предусматривать обработку таких ситуаций, оставлять како-то зазор, что прога должна запустится с 18.00 до 18.05 и перед запуском проверять GetExitCodeProcess(STILL_ACTIVE)
     
  12. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    bogrus

    есть такая штука в *nix - anacron называется. Она умеет выполнять задания, время которых было пропущено из-за отключения компа. Надо просто проставлять отметку выполнения (дату) и при построении списка не бруть следующую задачу от текущего времени а и запускать все предыдущие для которых нет отметки о выполнении.
     
  13. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    небольшая идея: можно заюзать тотже unix_time (gregorian to julian and vice versa)