Страница 1 из 1

Шаблон оконного hal приложения

Добавлено: 09 мар 2015, 23:28
torvn77
Есть вот такое пояснение к утилите halcompile:
Compile .comp and .c files into .so or .ko HAL realtime components (the --compile flag)
Файлы со .so,в отличии от .ko,как я понимаю работают на стороне приложения.
И вот мысль,а можно из этого .so файла создать окно,и не просто окно,а с полноценным циклом обработки сообщении?

Основная же мысль у меня вот какая,если залудить ...VCP панель то,коли она была сделана в отдельном окне,
после её закрытия компонент выгружается,а пины закрываются.
Потенциально это может привести к необходимости держать кучу панелей открытыми просто для того,чтобы сохранялись создаваемые ими пины.
Вот бы сделать так,чтоб при закрытии окна компонент продолжал работу,а при активации пина show_window воссоздавал окно заново.

Кто как предложит делать такое приложение?
Можно реализовать обработку событии окна,или придётся делать пин close_window?
Опыт рисования регтангла в винапи у меня есть,хотелось бы получить шаблон похожего приложения для Linux.

Re: Шаблон оконного hal приложения

Добавлено: 09 мар 2015, 23:44
Serg
Можно. Изучай Python и Tk.

Re: Шаблон оконного hal приложения

Добавлено: 10 мар 2015, 03:00
torvn77
Мне надо пример на С для написания своих компонентов,
а о ...VCP я написал для подачи идеи,я ими заниматься не буду(да и не могу).
Ну и чтобы мой скептицизм стал понятнее поставьте deluge и нагрузите в него торентов и посмотрите на получивщиеся тормоза.
По крайней мере три года назад,когда у меня было более 300 торрентов его морда жрала 100% мошьности процессора,
уводя в тормоза 3Ггц двуядерный процессор с оверклокерским ОЗУ.
Зачем завязываться на язык,который какуюто таблицу в 300 строк нормально обслужить не может?
Плюс работа питона зависит от форматирования кода.
ИМХО Python для приложении с перспективой роста объёма вычислении это тупик и я бы хотел по возможности обойтись без него.
(Мастера всё сложнее,а вкладок всё больше)

Ну и не хотелось бы вылезать за пределы уютного halcompile

И ещё,из мануальника к halcompile я не понял,как задать,будет компонент .ko , .so или отдельной программой загружаемой через loadusr?

Re: Шаблон оконного hal приложения

Добавлено: 10 мар 2015, 08:09
Serg
Понятно. Тему можно закрывать - у вас ничего не получится.

Re: Шаблон оконного hal приложения

Добавлено: 10 мар 2015, 12:26
torvn77
.UAVpilot,вчера тема набрала 38 просмотров,сейчас их уже 57.
Вы не одному мне поможете.

И ещё вопрос,в компонентах можно использовать тулкиты отличные от тулкита основного интерфейса,GTK3 там,или QT?

Re: Шаблон оконного hal приложения

Добавлено: 10 мар 2015, 13:08
Serg

Re: Шаблон оконного hal приложения

Добавлено: 10 мар 2015, 13:33
torvn77
А я вот искал "linux цикл обработки сообщении" и " linux обработка событии окна
Проблема в том что не находились достаточно понятные объяснения аналогичные GetMessage/CreateWindow из Виндовса.
Сейчас вроде сто-то нашлось,буду смотреть,подходит или нет.
( http://rus-linux.net/MyLDP/BOOKS/Linux- ... UI_01.html )

П.С.
А вообще мог не флудить,а сразу отправить на эту страницу.

Re: Шаблон оконного hal приложения

Добавлено: 10 мар 2015, 14:10
torvn77
По факту таже ерунда,приложение и отрисовка находятся в одной функции,а надо чтобы каждое находилось в своей.

Код: Выделить всё

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <errno.h> 
#include <X11/Xlib.h> 

extern int errno; 

int main( void ) { 
   Display *d; 
   Window w; 
   XEvent e; 
   char *msg = "Hello, World!"; 
   int s; 

   if( ( d = XOpenDisplay( getenv("DISPLAY" ) ) ) == NULL ) {  // Соединиться с X сервером, 
      printf( "Can't connect X server: %s\n", strerror( errno ) ); 
      exit( 1 ); 
   } 
   s = DefaultScreen( d ); 
   w = XCreateSimpleWindow( d, RootWindow( d, s ),     // Создать окно 
                            10, 10, 200, 200, 1, 
                            BlackPixel( d, s ), WhitePixel( d, s ) ); 
   XSelectInput( d, w, ExposureMask | KeyPressMask );  // На какие события будем реагировать? 
   XMapWindow( d, w );                                 // Вывести окно на экран 
   while( 1 ) {                                        // Бесконечный цикл обработки событий 
      XNextEvent( d, &e ); 
      if( e.type == Expose ) {                         // Перерисовать окно 
         XFillRectangle( d, w, DefaultGC( d, s ), 20, 20, 10, 10 ); 
         XDrawString( d, w, DefaultGC( d, s ), 50, 50, msg, strlen( msg ) ); 
      } 
      if( e.type == KeyPress )                         // При нажатии кнопки - выход 
         break; 
   } 
   XCloseDisplay( d );                                 // Закрыть соединение с X сервером 
   return 0; 
}