[09:41:40] <vgodunko> landgraf: давайте Матрёшку расширим что бы она могла процессами управлять?
[09:41:47] <vgodunko> И делать это "асинхронно"
[10:09:49] <landgraf> неплохо бы было, наверное
[10:10:07] <landgraf> но мне сейчас нужен некий job-manager
[12:07:44] <landgraf> avirtda_dd_vms.ads:44:05: instantiation error at a-convec.ads:41
avirtda_dd_vms.ads:44:05: no visible subprogram matches the specification for "="
что это?
[12:08:37] <subj_rs> грит что не видит операцию = для чегото
[12:09:47] <landgraf> http://fpaste.org/PEbV/ [+] там вроде нет "="
[12:10:44] <subj_rs> а где там 44-я строка?
[12:11:22] <landgraf> Index_Type => Disk_Count);
[12:15:39] <landgraf> with function "=" (Left, Right : Element_Type) return Boolean is <>;
[12:15:48] <landgraf> это из convec
[12:16:20] <landgraf> надо для Element_Type сделать "="?
[12:16:38] <subj_rs> видимо
[12:16:46] <landgraf> так там tagged record
[12:18:40] <subj_rs> что мешает определить = ?
[12:20:19] <subj_rs> а вообще все эти штучки из 05-го стандарта мозг выносят порой
EA : Elements_Array (Index_Type'First .. Last);
[12:21:26] <subj_rs> landgraf: эта, positive он 1 .. integer'last.
у себя исползуй natural для диапазона 0..10
[12:24:50] <landgraf> subj_rs, мне нужен динамический массив, вот и выношу мозг, да
[12:39:29] <landgraf> вроде разобрался
[12:44:30] <landgraf> чую надо будет потрахаться с указателями потом
[12:44:43] <landgraf> и deallocation всякиими
[13:09:47] <landgraf> как статические переменные делать?
[13:10:46] <subj_rs> всмысле?
[13:12:45] <landgraf> надо сделать что-то типа Next_Display_Port, который будет инкрементироваться при создании новой виртуалки. надо где-то ххранить его
[13:13:14] <subj_rs> в любом пакете
[13:13:57] <landgraf> то есть если я в пакете создам Port : Integer := 5900; - то смогу потом обращаться к нему? o_O
[13:14:34] <landgraf> хм, скомпилялось
[13:14:48] <subj_rs> сделай в теле пакета эту переменную ,и публичную функцию, возвращающую порт ,и увеличивающую этот порт
[13:15:29] <subj_rs> и даже лучше через протекдед
[13:16:06] <landgraf> фигасе
[13:16:08] <landgraf> круто )
[13:20:48] <vgodunko> "=" должен обязательно поставляться в настройку контейнера.
[13:21:13] <landgraf> что-то не увеличивается порт :(
[13:21:32] <vgodunko> И нужно помнить, что для Ada<=2005 для записей по умолчанию производится "побитовое" сравнение, а не то, о чём вы подумали.
[13:22:07] <vgodunko> А вот для Ada2012 сравнение выполняется с использование операторов сравнения для типов каждого поля.
[13:22:38] <vgodunko> Лучше всего использовать protected, поскольку, как я понимаю, возможен параллельный доступ.
[13:23:00] <vgodunko> И не забывать, что само ничто меняться не будет, нужно Port := Port + 1; написать.
[13:27:18] <landgraf> vgodunko, :-D
[13:27:21] <landgraf> protected function cannot modify protected object
[13:27:51] <subj_rs> дада
[13:28:44] <subj_rs> лучше чтобы конечный пользователь вызывал функцию, которая бы в свою очередь работала с протектед-типом
[13:30:49] <vgodunko> И правильно. Нужно использовать процедуру
[13:33:24] <landgraf> avirtda_dd_vms.adb:16:13: within protected function, protected object is constant
avirtda_dd_vms.adb:16:13: cannot call operation that may modify it
[13:33:35] <landgraf> как его изменять? :(
[13:34:40] <landgraf> функцию которая возвращает и процедуру которая менять? )
[13:38:17] <landgraf> работает вроде
[13:43:16] <vgodunko> процедуру, которая будет менять значение и возвращать новое
[13:43:40] <subj_rs> неудобно
[13:44:03] <vgodunko> critical section удобнее? ;-)
[13:44:24] <subj_rs> функцию-обертку над протекдед-типом
[13:45:08] <subj_rs> вызываешь функцию - а она в свою очередь вызывает процедуры из защищенного типа
[13:50:16] <landgraf> subj_rs, а протектед функцию, которая возвращает переменную не надо?
[13:50:34] <subj_rs> не надо
[13:50:54] <subj_rs> функция все равно общается с протектед типом
[13:52:31] <landgraf> component must be declared in private part of protected type
[13:52:34] <landgraf> эм
[13:52:46] <landgraf> как к нему обращаться тогда?
[13:52:55] <subj_rs> к кому?
[13:53:50] <landgraf> subj_rs, http://fpaste.org/g9DO/ [+]
[13:54:15] <landgraf> subj_rs, вызывается Display_Port
[13:54:29] <landgraf> которую надо переименовать в Set_Display_Port, ну да ладно
[13:54:49] <landgraf> как избавиться от function Get_Port return Integer;?
[13:55:00] <subj_rs> переменные защищенного типа надо в private запихивать
[13:55:22] <landgraf> #
Port : Integer := 5900;
[13:55:37] <landgraf> в приват пакета?
[13:55:52] <subj_rs> New_Port : Integer := 5900; - убрать в приват защищенного типа или вообще убрать
[13:56:02] <landgraf> subj_rs, я его вообще нах удалил
[13:56:18] <landgraf> он для теста был
[13:56:23] <landgraf> и не нужен
[13:56:50] <subj_rs> а на что ругается то?
[13:56:59] <landgraf> вот сейчас не на что )
[13:57:09] <landgraf> ты ж гришь что можно убрать Get_Port?
[13:57:15] <landgraf> или я что-то неправильно понял?
[13:57:24] <subj_rs> можешь и так оставить
[13:57:40] <landgraf> дык по-другому не хочет
[13:58:23] <subj_rs> но так между моментами get_port и increment_port - может ктото другой вклиниться )
[13:58:38] <subj_rs> и два одинаковый порта в итоге отдашь
[13:58:49] <landgraf> вот и я о том же
[13:58:55] <landgraf> как от этого избавиться?
[13:59:08] <landgraf> из get_port нельзы вызвать increment_port
[13:59:31] <landgraf> сделать Display_port защищенной?
[13:59:41] <subj_rs> ща
[13:59:43] <landgraf> какой-то изврат
[14:00:47] <landgraf> или семафор какой?
[14:01:38] <vgodunko> landgraf: сделать глобальный защищённый объект с одной единственной процедурой - Get_Next
[14:02:26] <landgraf> а как из нее значение получать? out ?
[14:02:33] <subj_rs>
protected Variables is
procedure Get_Port (X : in out Integer);
private
Port : Integer := 5900;
end Variables;
protected body Variables is
procedure Get_Port (X : in out Integer) is
begin
X := Port;
Port := Port + 1;
if Port = 65535 then - быть может тут об этом надо позаботиться
end Get_Port;
end Variables;
procedure Display_Port(This : in out Avirtda_DD_VM) is
begin
Variables.Get_Port (This.Display_Port);
end Display_Port;
[14:05:20] <landgraf> if Port = 65535 - я тут поставил TODO сделать Port_Type integer range 1..65535 потом )
[14:06:43] <vgodunko> procedure Get_Port (Number : out Natural)
[14:07:10] <vgodunko> in out это in out, здесь же никаких in но чистый out
[14:07:46] <subj_rs> ну да
[14:08:27] <subj_rs> landgraf: а Port - это вообще для чего?
[14:16:34] <vgodunko> GNAT.Sockets.Port_Type ?
[14:17:03] <subj_rs> для listen сокетов это все ой как не подойдет )
[14:21:17] <landgraf> subj_rs, в данном случае - vnc (spice) порт
[14:35:26] <landgraf> а как-нибудь можно Ctrl+c отлавливать и действия на него выполнять перед выходом?
[14:35:40] <landgraf> как в Java :))
[14:35:43] <subj_rs> да
[14:35:44] <Жаба> subj_rs, да нед...
[14:35:54] <subj_rs> в гнат даже есть пакет для этого, но можно и самому
[14:36:01] <landgraf> subj_rs, какой пакет?
[14:36:09] <landgraf> как самому? )
[14:36:10] <subj_rs> я помню? )
[14:36:12] <landgraf> что курить
[14:36:14] <subj_rs> прерывания
[14:36:40] <subj_rs> GNAT.Ctrl_C
[14:36:42] <vgodunko> Ada.Interrupts.*
[14:36:52] <vgodunko> На... GNAT.Ctrl_C
[14:37:14] <landgraf> гуд, запишу в TODO
[14:37:21] <vgodunko> Мне кажется приятнее работать с сигналами как с сигналами.
[14:37:41] <subj_rs> в венде ctrl+c тоже 15-е прерывание?
[14:37:56] <vgodunko> Если статически, то назначаешь обработчики нужных сигналов на нужные защищённые подпрограммы и радуешся.
[14:37:58] <yeo> не, винда в пролете :)
[21:07:56] <vgodunko> Кто на Ada-Ru?
[21:13:38] <c0opht> Все, Нокии настал северный пушной зверек
[21:14:57] <c0opht> http://www.opennet.ru/opennews/art.shtml?num=30381
[21:18:47] <landgraf> qt тоже умрет?
[21:18:57] <c0opht> нет
[21:18:57] <Жаба> c0opht, нет да!
[21:19:05] <c0opht> нет нет