Конференция "Media" » Процедура не выполняется при каждом вызове события. Что делать?
 
  • Gpol (02.12.11 19:26) [0]
    Допустим есть событие OnEvent которое вызывается каждые 15 милисек. По этому событию выполняеться процедура proc1(x,y,z,a:integer), которая выполняется 100 милисек. В результате, пока не будет обработано предыдущее событие следующее не выполниться, и множество промежуточных действий(процедур) пропускается.

    Вопрос: как сделать так чтобы процедура добавлялись в очередь и из очереди процедуры последовательно выполнялись? Или есть какое нибудь другое решение?
  • Gpol (02.12.11 19:28) [1]
    как реализовать очередь?
  • Jeer © (02.12.11 19:39) [2]
    Ничего, что очередь или число потоков будут прогрессировать ? :)
  • antonn © (02.12.11 22:20) [3]
    ну если оно будет работать относительно малое время и потом будет время на обработку очереди - памяти хватит :)
  • Jeer © (02.12.11 22:26) [4]

    > antonn ©   (02.12.11 22:20) [3]
    >
    > ну если оно будет работать относительно малое время


    Уфы, аффтар это от нас утаил, в таких случаях следует подозревать худшее :)
  • Jeer © (02.12.11 22:31) [5]
    P.S.
    Если на событие вызывается одна и та же процедура, то и очереди не надо, достаточно счетчика ивентов - от Event +1, от процедуры -1.
  • Rouse_ © (02.12.11 22:31) [6]
    При правильной синхронизации данная проблема просто не может существовать :)
  • Jeer © (02.12.11 22:53) [7]

    > Rouse_ ©   (02.12.11 22:31) [6]
    >
    > При правильной синхронизации данная проблема просто не может
    > существовать :)


    Если события существуют сами по себе, то, при данных временных соотношениях, неизбежно расхождение вплоть до полной агонии. :)
  • Rouse_ © (02.12.11 23:09) [8]

    >  Jeer ©   (02.12.11 22:53) [7]
    > Если события существуют сами по себе, то, при данных временных
    > соотношениях, неизбежно расхождение вплоть до полной агонии.  :)

    Очередь совсем отменили? :)
  • Jeer © (03.12.11 00:52) [9]

    > Rouse_ ©   (02.12.11 23:09) [8]


    Саш, мы опять по кругу пошли. :)
    Если у аффтара события генерируются, пока включен компьютер даже в течение дня, то за 24 часа получим очередь длиной в 6 млн. событий.
    Для ее отработки аффтару потребуется 13 суток выполнения его процедур.

    Но он нас ничем не ограничил сверху.
    Может у него атомная станция со временем непрерывной работы 50 лет :)
  • Eternal_Stranger © (03.12.11 07:44) [10]
    Вам стоит создать tList с записью параметров функции.
    В теле функции после выполнения вашего алгоритма, (с параметрами взятыми из этого tLista) удалять из списка запись с отработнными параметрами и проверять, есть ли в списке ещё записи. Если они есть, вызывать функцию внутри самой себя.
    ???
    PROFIT!

    onEvent у вас будет заполнять tList, создавая ту самую очередь, а функция будет уже проверять её наличие.
  • QAZ (03.12.11 22:45) [11]

    > процедура proc1(x,y,z,a:integer), которая выполняется 100
    > милисек

    а что можно делать с 4мя числами столько времени?
  • brother © (04.12.11 14:30) [12]
    хе, бы ло бы желание!)
    procedure proc1(x,y,z,a:integer);
    var
     l: integer;
    begin
     l:= x+y+z+a;
     sleep(100);
    end;

    profit!
  • имя (09.11.13 12:47) [13]
    Удалено модератором
 
Конференция "Media" » Процедура не выполняется при каждом вызове события. Что делать?
Есть новые Нет новых   [134427   +38][b:0][p:0]