Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Andrew Ezhguroff                     2:5020/400     13 Oct 2002  16:08:17
 To : Andrew Ezhguroff
 Subject : Re: Сортировка "наобо  рот"
 -------------------------------------------------------------------------------- 
 
 Привет! "Andrew Ezhguroff" <eandr@com2com.ru>  сообщил(а):
 
 Вот такой набросок алгоритма на псевдокоде:
 
 type _List_Msg := record
                     Next_Msg: ^_List_Msg;
                     Val_Msg :  _Message ;
                   end record;
 
 type _Queue := record
                  Prev_Queue:  integer  ;
                  Next_Queue:  integer  ;
                  Time_Msg  :  long     ;
                  Beg_Msg   : ^_List_Msg;
                  End_Msg   : ^_List_Msg;
                end record;
 
 var Tab_Queue: array [0..0xFF] of _Queue;
     Cur_Queue: integer(-1);
 
 // Параллельный процесс - выдача сообщений устройствам
 task Put_Msg;
   var Delta_Time:  long     ;
       Tmp_Msg   : ^_List_Msg;
 begin
   loop
     wait while Cur_Queue==(-1); // Приостанавливаем, пока список пуст
     Delta_Time:=Min_Time-(Get_Time()-Tab_Queue[Cur_Queue].Time_Msg);
     if Delta_Time>0 then // Приостанавливаем, пока не истекло время
       wait time(Delta_Time);
     end if;
 
     // Собственно отправка сообщения
     Tmp_Msg:=Tab_Queue[Cur_Queue].Beg_Msg;
     send_message(Cur_Queue, Tmp_Msg^.Val_Msg);
     Tab_Queue[Cur_Queue].Time_Msg:=Get_Time();
 
     critical
       // Удаляем сообщение из очереди
       Tab_Queue[Cur_Queue].Beg_Msg:=Tmp_Msg^.Next_Msg;
       delete Tmp_Msg;
 
       if Tab_Queue[Cur_Queue].Beg_Msg!=NULL then
         // Если очередь не пуста, переходим к следующей очереди
         Cur_Queue:=Tab_Queue[Cur_Queue].Next_Queue;
       elsif Cur_Queue!=Tab_Queue[Cur_Queue].Next_Queue then
         // Если в списке более одной очереди,
         // удаляем пустую очередь из списка
         Tab_Queue[Tab_Queue[Cur_Queue].Next_Queue].Prev_Queue:=
           Tab_Queue[Cur_Queue].Prev_Queue;
         Tab_Queue[Tab_Queue[Cur_Queue].Prev_Queue].Next_Queue:=
           Tab_Queue[Cur_Queue].Next_Queue;
         Cur_Queue:=Tab_Queue[Cur_Queue].Next_Queue;
       else
         // Если непустых очередей нет, обнуляем список
         Cur_Queue:=(-1);
       end if;
     end ctitical;
   end loop;
 end task;
 
 // Интерфейс - занесение сообщения в очередь
 interface Out_Msg(Device: integer, Msg: Message);
   var Tmp_Msg : ^_List_Msg;
 begin
   critical
     // Добавляем сообщение к очереди
     Tmp_Msg :=new _List_Msg(Message);
     if Tab_Tab_Queue[Device].Beg_Msg!=NULL then
       // Если очередь не пуста
       Tab_Tab_Queue[Device].End_Msg^.Next_Msg:=Tmp_Msg;
     else
       // Если очередь пуста
       Tab_Tab_Queue[Device].Beg_Msg:=Tmp_Msg;
       if Cur_Queue==(-1) then
         // Добавляем очередь в пустой кольцевой список
         Cur_Queue:=Device;
         Tab_Queue[Device].Prev_Queue:=Device;
         Tab_Queue[Device].Next_Queue:=Device;
       else
         // Добавляем очередь в непустой кольцевой список
         // Это простейший вариант, желательно его немного усложнить,
         // чтобы добавлять не в "конец", а по времени отправки
         // последнего сообщения
         Tab_Queue[Device].Next_Queue:=Cur_Queue;
         Tab_Queue[Device].Prev_Queue:=Tab_Queue[Cur_Queue].Prev_Queue;
         Tab_Queue[Tab_Queue[Cur_Queue].Prev_Queue].Next_Queue:=Device;
         Tab_Queue[Cur_Queue].Prev_Queue:=Device;
       end if;
     end if;
     Tab_Tab_Queue[Device].End_Msg:=Tmp_Msg;
   end critical;
 end interface;
 
 С уважением, Андрей.
 -- 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Mail.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Сортировка "наоборот"   Alexey Krasnov   12 Oct 2002 16:54:16 
 Re: Сортировка "наоборот"   Andrew Ezhguroff   12 Oct 2002 19:21:24 
 Re: Сортировка "наобо рот"   Oleg Khovayko   12 Oct 2002 20:16:03 
 Re: Сортировка "наобо рот"   Andrey Belyakov   12 Oct 2002 22:44:23 
 Сортировка "наобо рот"   Alexey Krasnov   13 Oct 2002 20:55:02 
 Re: Сортировка "наобо рот"   Andrew Ezhguroff   14 Oct 2002 00:08:49 
 Сортировка "наобо рот"   Alexey Krasnov   14 Oct 2002 20:44:00 
 Re: Сортировка "наобо рот"   Andrew Ezhguroff   12 Oct 2002 23:14:52 
 Re: Сортировка "наобо рот"   Oleg Khovayko   13 Oct 2002 00:12:12 
 Re: Сортировка "наобо рот"   Andrew Ezhguroff   13 Oct 2002 03:03:03 
 Re: Сортировка "наобо рот"   Andrew Ezhguroff   13 Oct 2002 16:08:17 
 Сортировка "наобо рот"   Alexey Krasnov   13 Oct 2002 20:34:46 
 Сортировка "наобо рот"   Alexey Krasnov   13 Oct 2002 20:19:20 
 Re: Сортировка "наобо рот"   Andrew Ezhguroff   14 Oct 2002 00:08:49 
 Сортировка "наоборот"   Alexey Krasnov   13 Oct 2002 20:04:16 
 Сортировка "наоборот"   Vovanius Uryvaeff   16 Oct 2002 18:54:08 
 Сортировка "наоборот"   Serge Nozhenko   12 Oct 2002 19:34:06 
 Re: Сортировка "наобо рот"   Oleg Khovayko   12 Oct 2002 21:57:50 
 Сортировка "наобо рот"   Serge Nozhenko   13 Oct 2002 14:49:14 
 Re: Сортировка "наобо рот"   Oleg Khovayko   12 Oct 2002 20:05:54 
 Сортировка "наобо рот"   Alexey Krasnov   13 Oct 2002 20:12:32 
 Re: Сортировка "наоборот"   Sergey Andrianov   15 Oct 2002 22:08:42 
 Соpтиpовка "наобоpот"   Sergey Skorodinsky   21 Oct 2002 21:55:15 
Архивное /ru.algorithms/6488a8a20d98.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional