Страница 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;
}