Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT 3.3] Получение событий от ОС 
V
    Опции темы
Tiffany
Дата 18.4.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 23.12.2006
Где: Санкт-Петербург

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



Как сделать так, чтобы в данном участке readBlock происходил только при появлении новых данных? Т.е. чтобы он не постоянно в цикле считывал из файла, а по приходу определенного события (в виндовсе ето делалось, насколько я помню через WaitForSingleObject, WaitForMultipleObject). Были подсказаны некоторые функции: poll, epoll, select и pselect - коих я не нашла в своей версии QT(во всяком случае в доках). Если это все же в ту же степь, просьба с примерчиками и ссылочками на мануалы  smile  smile 

 
Код

while(1)
    if (res=f1.readBlock( buf, sizeof(buf)-1 ) )    //"ВОПРОС_1"
    {
       buf[res]='\0';
       event1->message=QString::QString(buf);
        QApplication::postEvent(hand, event1);
       bzero(&buf, sizeof(buf));
        bzero(&event1, sizeof(event1));
        event1 = new MyEvent(1003);
    }


P. S.
QFile f1
//Суть в том, что открывается порт на чтение\запись. В одном потоке происходит указанный цикл, в другом отправка данных.

PM MAIL   Вверх
Ken
Дата 22.4.2008, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 31.3.2007

Репутация: 1
Всего: 4



poll(), select(), ... часть posix api а не Qt. 
А чем не удовлетворяет текущее решение? Использовние select(), poll(), ... не сделает ваш код проще.
PM MAIL   Вверх
Tiffany
Дата 24.4.2008, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 23.12.2006
Где: Санкт-Петербург

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



В общем выкрутились с select`ом. Как именно - показано ниже. Код тот же и смысл тот же. А не устраивало предыдущее решение тем, что "тратилось процессорное время" на read. А так (!!!) "оно" типо зависает на select`е и не начинает read до поступления новых данных. Вот как-то так  smile  На самом деле, где-то глубоко в душЕ, я понимаю что и select занимается чем-то аналогичным, но работодатель требовал именно такого "вида кода". Вопрос можно считать решенным, в общем, но если у кого-то еще будут предложения, было бы оч неплохо   smile 
Код

fd_set rfds;
struct timeval tv;
int retval;
QFile f1(portname);


                FD_ZERO(&rfds);
    FD_SET(f1.handle(), &rfds);
    retval = select(f1.handle()+1, &rfds, NULL, NULL, NULL);
    if (retval)
    {
       res=f1.readBlock( buf, sizeof(buf)-1 );

       buf[res]='\0';
       event1->message=QString::QString(buf);
       QApplication::postEvent(hand, event1);
       bzero(&buf, sizeof(buf));
       bzero(&event1, sizeof(event1));
       event1 = new MyEvent(PortReaded);
    }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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