crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Qt и callback функции Windows
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
ldimitri Дата 8.4.2009, 9:54
 
Цитата(kwisp @ 8.4.2009, 0:28) *
ну что как успехи с хитрой задачей?


Решил особо не думать)) Зарегистрировал событие, оно устанавливается в callback'e. каждый экземпляр класса его отслеживает, и потом проверяет , ему ли это пришло. если ему - то и считывает, если нет - то поток снова уходит в WaitForSingleObject. Мне так показалось наиболее быстро и безболезненно, тем более что при таком образе действий становится возможным использовать тот же самый поток, что и в мониторинге по поллингу (с добавлением в него пары условных операторов). Вот.
Собственно, на данном этапе разработки, задача первичной оболочки драйвера решена и отлажена, а по мере появления непоняток и интересностей во время превращения данной штуковины в вид "Driver->QDeviceDriver->QDeviceManager->QDeviceClient" буду обращаться к коллективному разуму )
kwisp Дата 7.4.2009, 23:28
  ну что как успехи с хитрой задачей?
kwisp Дата 3.4.2009, 14:40
 
Цитата(ldimitri @ 3.4.2009, 15:29) *
заранее неизвестны ассоциации номеров устройств и объектов,


может сделать контейнер указателей на объекты обработчики и по ключу(индексу) (ключ или индекс есть номер устройства) получать доступ к объекту или его callback`у.... заполнять контейнер можно в любое время по идее он опредлен как статический и по умолчанию в нем нули вместо указателй при доступе проверять на ноль.
ldimitri Дата 3.4.2009, 14:29
  Есть драйвер. Он поддерживает до восьми одновременно подключенных устройств. Есть возможнось работы по поллингу(уже реализована в Qt-классе) и по callback. в callback'e должно происходить чтение принятых данных в структуру(определенную в хедере драйвера).
Это делается примерно так:
void __stdcall cbFunction(u16 type)
{
    structure rs;
    int ret;
    
    ret = ReadData(num_device, &rs, 1);
    if (ret >= 0)
        //передать данные в экземпляр класса, ответственного за конкретный номер устройства (num_device)
    else
        //всякая обработка ошибок
}


Суть в том, что этой функции заранее неизвестны ассоциации номеров устройств и объектов, устанавливается она посредине инициализации устройства, и вот в "передаче данных в экземпляр класса, ответственного за конкретный номер устройства" и есть сама загвоздка.

До чего додумался с момента предыдущего поста:
1. Думал сделать а-ля COM - есть класс, ответственный за создание, удаление, управление объектами и связями "объект-номер устройства". При таком раскладе - на каждое устройство прописывать по одному callback'у да еще держать пачку глобальных переменных.
2. Другой вариант - анализ в самой callback-функции наличия ассоциированных объектов с конкретным номером устройства - при этом получается что функция слишком нагружается, а она должна быстро счтитать, отослать и - ret.

Жду других идей, критики(я ее особенно люблю - когда меня критикуют мне все жестче идеи в голову приходят;) ) и дополнений по этим двум вариантам.
kwisp Дата 3.4.2009, 13:38
  ldimitri,
ничего не понятно может быть поэтому жутко интересно.
давайте подробности.
trdm Дата 3.4.2009, 11:03
 
Цитата(kuler @ 3.4.2009, 11:17) *
вот так:
void func()
{
 obj->Process();
}

можно свичом дополнить

Свитч на постоянно меняющееся количество процессов? О_о
kuler Дата 3.4.2009, 10:17
  вот так:
void func()
{
 obj->Process();
}

можно свичом дополнить
Litkevich Yuriy Дата 3.4.2009, 9:57
 
Цитата(ldimitri @ 3.4.2009, 13:25) *
Как можно сделать так, чтобы внеклассовая функция знала, что в данный какой-либо конкретный момент времени ей нужно использовать методы определенного класса?
ну как сделать, чтобы функция ЗНАЛА, я думаю кроме тебя врядли кто-то знает, ведь ты же работаешь с устройством и должен знать его тип.
И из этого вопроса врятли можно сделать вывод, что речь и дёт о Qt.

П.С. может, конечно, я сути не понял. Тогда давай подробности.
ldimitri Дата 3.4.2009, 9:25
  Суть вопроса состоит в следующем:
Пишется класс-оболочка для драйвера устройства, одна из функций этого драйвера устанавливает callback на события устройства. Как можно сделать так, чтобы внеклассовая функция знала, что в данный какой-либо конкретный момент времени ей нужно использовать методы определенного класса?(устройств может быть подключено одновременно несколько, на каждое пойдет свой собственный объект класса-оболочки).
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 2:05