-
Допустим есть событие OnEvent которое вызывается каждые 15 милисек. По этому событию выполняеться процедура proc1(x,y,z,a:integer), которая выполняется 100 милисек. В результате, пока не будет обработано предыдущее событие следующее не выполниться, и множество промежуточных действий(процедур) пропускается.
Вопрос: как сделать так чтобы процедура добавлялись в очередь и из очереди процедуры последовательно выполнялись? Или есть какое нибудь другое решение?
-
как реализовать очередь?
-
Ничего, что очередь или число потоков будут прогрессировать ? :)
-
ну если оно будет работать относительно малое время и потом будет время на обработку очереди - памяти хватит :)
-
> antonn © (02.12.11 22:20) [3] > > ну если оно будет работать относительно малое время
Уфы, аффтар это от нас утаил, в таких случаях следует подозревать худшее :)
-
P.S. Если на событие вызывается одна и та же процедура, то и очереди не надо, достаточно счетчика ивентов - от Event +1, от процедуры -1.
-
При правильной синхронизации данная проблема просто не может существовать :)
-
> Rouse_ © (02.12.11 22:31) [6] > > При правильной синхронизации данная проблема просто не может > существовать :)
Если события существуют сами по себе, то, при данных временных соотношениях, неизбежно расхождение вплоть до полной агонии. :)
-
> Jeer © (02.12.11 22:53) [7] > Если события существуют сами по себе, то, при данных временных > соотношениях, неизбежно расхождение вплоть до полной агонии. :)
Очередь совсем отменили? :)
-
> Rouse_ © (02.12.11 23:09) [8]
Саш, мы опять по кругу пошли. :) Если у аффтара события генерируются, пока включен компьютер даже в течение дня, то за 24 часа получим очередь длиной в 6 млн. событий. Для ее отработки аффтару потребуется 13 суток выполнения его процедур.
Но он нас ничем не ограничил сверху. Может у него атомная станция со временем непрерывной работы 50 лет :)
-
Вам стоит создать tList с записью параметров функции. В теле функции после выполнения вашего алгоритма, (с параметрами взятыми из этого tLista) удалять из списка запись с отработнными параметрами и проверять, есть ли в списке ещё записи. Если они есть, вызывать функцию внутри самой себя. ??? PROFIT!
onEvent у вас будет заполнять tList, создавая ту самую очередь, а функция будет уже проверять её наличие.
-
> процедура proc1(x,y,z,a:integer), которая выполняется 100 > милисек
а что можно делать с 4мя числами столько времени?
-
хе, бы ло бы желание!) procedure proc1(x,y,z,a:integer); var l: integer; begin l:= x+y+z+a; sleep(100); end;
profit!
-
Удалено модератором
|