Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из thread словить события родителя, Не ловятся нажатия клавиш 
:(
    Опции темы
powerfox
Дата 24.8.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 5
Всего: 97



Это кроссплатформенная библиотека, но работаю в никсах (и проблема тоже в никсах, в форточках не тестил) + пишу в домашнем для меня разделе smile

Есть такой код:
Код

program test;
uses sdlgraph;
{$define logging}

{mode:=10, driver = 15}
var
i,grD,grM:Integer;
begin
 grD:=0;
 grM:=0;
 InitGraph(grD,grM,' ');
 writeln(GraphErrorMsg(GraphResult));
 for i:=10 to 100 do
  DirectPutPixel(10,i);
 HLine(300,500,450);
 Bar3D(550,300,700,700,100,true);
 readln;
 closeGraph;
end.


sdlgraph - мой модуль (http://itmo.vingrad.ru/files/sdlgraph/). SDL использует thread для создания окна. Запускаю test через konsole. Доходит до readln. Когда активно окно SDL, то при нажатии enter ничего не происходит, если же konsole - работает нормально. Если я запускаю через konqueror, то быстро выполняется и закрывается (не ждёт ввода).
Мне нужно что-то с этим сделать. Так как я хочу совместимости с кодом для обычного graph. Но при этом желательно ограничиться изменениями в моём коде (а не SDL или fpc). Также надо, чтобы код был кроссплатформенным (или писать для никсов, винды и мака отдельно куски) 



--------------------
user posted image
PM WWW   Вверх
bsa
Дата 24.8.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



думаю, тебе придется закрыть стандартный ввод в этом случае и заменить его каким-нибудь пайпом, например, в который будешь посылать события из потока окна.
PM   Вверх
powerfox
Дата 24.8.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 5
Всего: 97



Цитата(bsa @  24.8.2007,  14:14 Найти цитируемый пост)
думаю, тебе придется закрыть стандартный ввод в этом случае и заменить его каким-нибудь пайпом, например, в который будешь посылать события из потока окна.

Спасибо, а это мысль. Надо будет посмотреть в этом направлении. Закрывать ввод даже не надо. Мне просто нужно отлавливать ввод и перенапрвлять его.
Только тогда проблема в другом... smile Для отлова нужен ещё 1 процесс. Если его не сделать, то будет цикл, завязанный на какую-нибудь клавишу (или условие). А тогда будет не отличить
Код

InitGraph(grD,grM,' ');
рисование
closeGraph;

И
Код

InitGraph(grD,grM,' ');
рисование
readln;
closeGraph;

А в closeGraph я могу killthread прописать.

Вопрос в том, могу ли я создать канал из моего приложения, не трогая реализацию SDL?


--------------------
user posted image
PM WWW   Вверх
MAKCim
Дата 24.8.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(powerfox @  24.8.2007,  13:29 Найти цитируемый пост)
Вопрос в том, могу ли я создать канал из моего приложения, не трогая реализацию SDL?

почему нет?
прописать прототип mkfifo()
Код

int mkfifo(const char * pathname, mode_t mode);

на Pascal и вызвать (а можно и не писать прототип, если Pascal поддерживает ссылки на функции без прототипа)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 24.8.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



По-моему, тебе надо в реализации своей либы sdlgraph в initgraph() сделать замену текущего стандартного ввода на фифо канал, а в closegraph() - обратную замену и закрытие fifo. Т.о. тебе в initgraph() надо запускать поток работы с SDL и обработки событий, а в closegraph() его останавливать.
PM   Вверх
powerfox
Дата 24.8.2007, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 5
Всего: 97



Ok, спасибо! На днях буду разбираться.


--------------------
user posted image
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.