Название: Выполнение в функции, без использования слота. Отправлено: Sancho_s_rancho от Май 19, 2009, 08:55 Есть некий класс для общения с девайсом. Вовсю использует сигналы и слоты.
Пример: Я вызывают метод device::sendCommand(QString str1) и он мне в слот device::answer(QString str2) дает ответ от девайса или ошибку, мол таймаут у меня. Для меня это не очень удобно. Хочется обойтись одной функцией: myFunction() { sendCommand(QString str1); waitForAnswer(); //do something } Как это грамотно организовать. Название: Re: Выполнение в функции, без использования слота. Отправлено: kwisp от Май 19, 2009, 10:24 если действительно этого хотите есть функции
void QTest::qWait ( int ms ) [static] void QTest::qSleep ( int ms ) Название: Re: Выполнение в функции, без использования слота. Отправлено: Sancho_s_rancho от Май 19, 2009, 10:27 Это не очень хорошее решение.
Название: Re: Выполнение в функции, без использования слота. Отправлено: kuzulis от Май 19, 2009, 10:51 1. А под винду или под что программа то?
2. А чем не устраивает обмен через сигналы/слоты? 3. Через что идет обмен с девайсом (сокет, последовательный порт и т.п.) ??? Название: Re: Выполнение в функции, без использования слота. Отправлено: kuzulis от Май 19, 2009, 10:52 4. Класс - чей наследник???
Название: Re: Выполнение в функции, без использования слота. Отправлено: Sancho_s_rancho от Май 19, 2009, 12:18 1. А под винду или под что программа то? 1. Потенциально Windows/Linux2. А чем не устраивает обмен через сигналы/слоты? 3. Через что идет обмен с девайсом (сокет, последовательный порт и т.п.) ??? 2. Кода больше и он сложнее. 3. Serial port Для себя я выход нашел в QxtSignalWaiter от www.libqxt.org сигнально-слотный механизм не всегда удобен. Пример: Я спрашиваю девайс: как тебя зовут? он мне в течении n msec отвечает:"Прыбор" или таймаут говорит "Беда какая-то". Если ты "Прыбор", то сделай мне то-то и то-то. Это все делается в одном методе. Со слотами же получается, что я спрашиваю тут, а отвечают мне где-то там далеко. Причем отвечают всегда в одном месте, в не зависимости от того, где я спрашиваю. Название: Re: Выполнение в функции, без использования слота. Отправлено: kwisp от Май 19, 2009, 12:37 Это не очень хорошее решение. совершенно согласен. однако, интересно как организован внутри QxtSignalWaiter? не утверждаю что через qWait(), просто интересно. Название: Re: Выполнение в функции, без использования слота. Отправлено: kuzulis от Май 19, 2009, 13:34 Цитировать 3. Serial port см. топик : http://www.prog.org.ru/topic_9537_0.html :) и мож тогда и подскажете там мне что нибудь :) Название: Re: Выполнение в функции, без использования слота. Отправлено: Sancho_s_rancho от Май 20, 2009, 17:36 Это не очень хорошее решение. совершенно согласен. однако, интересно как организован внутри QxtSignalWaiter? не утверждаю что через qWait(), просто интересно. Название: Re: Выполнение в функции, без использования слота. Отправлено: kwisp от Май 29, 2009, 15:36 там QCoreApplication::processEvents() в цикле и таймер, если кому-то надо таймаут. :)что то типа этого Код: namespace QTest Название: Re: Выполнение в функции, без использования слота. Отправлено: pastor от Май 29, 2009, 17:19 http://www.prog.org.ru/topic_5140_0.html
Обратите внимание на реализацию с QEventLoop |