В Пнд, 16/03/2009 в 21:43 +0900, Alexander Danilov пишет:
> Покотиленко Костик пишет:
> > В Суб, 14/03/2009 в 10:30 +0900, Alexander Danilov пишет:
> >> Покотиленко Костик пишет:
> >>> В Птн, 13/03/2009 в 23:24 +0900, Alexander Danilov пишет:
> >>>> Покотиленко Костик пишет:
> >>>>> В Птн, 13/03/2009 в 14:39 +0300, Victor Wagner пишет:
> >>>>>> On 2009.03.13 at 11:38:27 +0200, Покотиленко Костик wrote:
> >>>>>>
> >>>>>>> Вот-вот.
> >>>>>>>
> >>>>>>> Плохая практика: прога с CLI + фронтенд
> >>>>>>> Хорошая практика: прога с CLI <-- либа --> прога с GUI
> >>>>>> Абсолютно не факт. первый вариант выносит содержательные действия в
> >>>>>> отдельный процесс, существенно упрощает отладку и облегчает избавление
> >>>>>> от блокировок GUI, когда программа занята чем-нибудь важным.
> >>>>>>
> >>>>>> В 90% случаев, на которые мне приходилось смотреть в дистрибутиве
> >>>>>> (естественно, это далеко не все библиотеки, которые в нем есть) 
> >>>>>> авторы библиотек не имели не малейшего понятия, как следует дизайнить
> >>>>>> интерфейсы библиотек. А это, между прочим, гораздо более сложная задача
> >>>>>> чем дизайн CLI, заточенного под встраивание.
> >>>>>>
> >>>>>> Ну и покрыть функциональность автоматизированными тестами в случае CLI
> >>>>>> гораздо проще.
> >>>>> Ни капли не согласен, особенно когда участвуют циклы. CLI->GUI не проще
> >>>>> ни разу, ни в разработке, ни в использовании, ни в отладке. Кроме,
> >>>>> конечно, случая, когда разработчик не умеет либы писать.
> >>>>>
> >>>> Проще, надо только понимать, что проще не в Си, я в языках, в которых 
> >>>> есть нормальная обработка
> >>>> событий, например, :) Tcl. Можно рулить одновременно многими cli 
> >>>> процессами, в том числе и 
> >>>> одинаковыми, а вот на Си, это будет не так уж просто. А в питоне или 
> >>>> ruby есть событийная обработка 
> >>>> на сокетах или каналах ввода/вывода?
> >>> Ты на Си в музее смотрел?
> >>>
> >> И давно на Си можно сделать событийную обработку канала или сокета в ТРИ 
> >> строки?
> > 
> > Вот универсальная конструкция для select:
> > 
> >     char strtmp[1024];
> >     struct timeval tv;
> >     int retval;
> > 
> >     fd_set rfds;
> >     fd_set wfds;
> > 
> >     for(;;) {
> > 
> >     FD_ZERO(&rfds);
> >     FD_ZERO(&wfds);
> >     FD_SET(0, &rfds);
> >     FD_SET(1, &wfds);
> > 
> >         tv.tv_sec = 5;
> >         tv.tv_usec = 0;
> > 
> >         retval = select(1, &rfds, &wfds, NULL, &tv);
> > 
> >         if(retval>0) {
> > 
> >             /* Processing connections */
> >         if(FD_ISSET(0, &rfds)) {
> >                 // read(0, buf, 1024);
> >         }
> >         if(FD_ISSET(1, &wfds)) {
> >                 // write(1, buf, 1024);
> >         }
> >     } else if(retval==-1) {
> >         if(errno!=4) {  /* Interrupted system call, we get that for SIGHUP
> > */
> >             sprintf(strtmp, "Select failed: errno=%d, %s", errno,
> > strerror(errno));
> >                 write(2, strtmp, strlen(strtmp));
> >                 exit(5);
> >         } else {
> >             sprintf(strtmp, "Select failed: errno=%d, %s, (Interrupted 
> > system
> > call, we get that for SIGHUP)\n", errno, strerror(errno));
> >             write(2, strtmp, strlen(strtmp));
> >         }
> >     } else {
> >     }
> >     }
> > 
> > 
> Сударь, я спрашивал про 3 (ТРИ) строки, а в вашем примере только 
> инициализация занимает пол экрана, 
> так я ещё и не вижу где тут собыйтийная обработка данных, нет её тут.

Естественно не видите, мелко сильно.

-- 
Покотиленко Костик <[email protected]>


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Ответить