![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ldimitri |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 3.4.2009 Пользователь №: 657 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Суть вопроса состоит в следующем:
Пишется класс-оболочка для драйвера устройства, одна из функций этого драйвера устанавливает callback на события устройства. Как можно сделать так, чтобы внеклассовая функция знала, что в данный какой-либо конкретный момент времени ей нужно использовать методы определенного класса?(устройств может быть подключено одновременно несколько, на каждое пойдет свой собственный объект класса-оболочки). |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Как можно сделать так, чтобы внеклассовая функция знала, что в данный какой-либо конкретный момент времени ей нужно использовать методы определенного класса? ну как сделать, чтобы функция ЗНАЛА, я думаю кроме тебя врядли кто-то знает, ведь ты же работаешь с устройством и должен знать его тип.И из этого вопроса врятли можно сделать вывод, что речь и дёт о Qt. П.С. может, конечно, я сути не понял. Тогда давай подробности. |
|
|
kuler |
![]()
Сообщение
#3
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
вот так:
можно свичом дополнить |
|
|
trdm |
![]()
Сообщение
#4
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kwisp |
![]()
Сообщение
#5
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
ldimitri,
ничего не понятно может быть поэтому жутко интересно. давайте подробности. |
|
|
ldimitri |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 3.4.2009 Пользователь №: 657 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Есть драйвер. Он поддерживает до восьми одновременно подключенных устройств. Есть возможнось работы по поллингу(уже реализована в Qt-классе) и по callback. в callback'e должно происходить чтение принятых данных в структуру(определенную в хедере драйвера).
Это делается примерно так:
Суть в том, что этой функции заранее неизвестны ассоциации номеров устройств и объектов, устанавливается она посредине инициализации устройства, и вот в "передаче данных в экземпляр класса, ответственного за конкретный номер устройства" и есть сама загвоздка. До чего додумался с момента предыдущего поста: 1. Думал сделать а-ля COM - есть класс, ответственный за создание, удаление, управление объектами и связями "объект-номер устройства". При таком раскладе - на каждое устройство прописывать по одному callback'у да еще держать пачку глобальных переменных. 2. Другой вариант - анализ в самой callback-функции наличия ассоциированных объектов с конкретным номером устройства - при этом получается что функция слишком нагружается, а она должна быстро счтитать, отослать и - ret. Жду других идей, критики(я ее особенно люблю - когда меня критикуют мне все жестче идеи в голову приходят ![]() |
|
|
kwisp |
![]()
Сообщение
#7
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
заранее неизвестны ассоциации номеров устройств и объектов, может сделать контейнер указателей на объекты обработчики и по ключу(индексу) (ключ или индекс есть номер устройства) получать доступ к объекту или его callback`у.... заполнять контейнер можно в любое время по идее он опредлен как статический и по умолчанию в нем нули вместо указателй при доступе проверять на ноль. |
|
|
kwisp |
![]()
Сообщение
#8
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
ну что как успехи с хитрой задачей?
|
|
|
ldimitri |
![]()
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 3.4.2009 Пользователь №: 657 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
ну что как успехи с хитрой задачей? Решил особо не думать)) Зарегистрировал событие, оно устанавливается в callback'e. каждый экземпляр класса его отслеживает, и потом проверяет , ему ли это пришло. если ему - то и считывает, если нет - то поток снова уходит в WaitForSingleObject. Мне так показалось наиболее быстро и безболезненно, тем более что при таком образе действий становится возможным использовать тот же самый поток, что и в мониторинге по поллингу (с добавлением в него пары условных операторов). Вот. Собственно, на данном этапе разработки, задача первичной оболочки драйвера решена и отлажена, а по мере появления непоняток и интересностей во время превращения данной штуковины в вид "Driver->QDeviceDriver->QDeviceManager->QDeviceClient" буду обращаться к коллективному разуму ) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 21.6.2025, 15:17 |