Название: Вопрос про функции Отправлено: ilnile от Сентябрь 30, 2013, 21:36 Код: int func1() { Как реализовать подобный подход? Мне нужно чтобы при выполнении функции она вернула результат по внешнему событию. Это вообще возможно? Название: Re: Вопрос про функции Отправлено: Bepec от Сентябрь 30, 2013, 21:48 Функции - если только через глобальную переменную, способ ты сам написал. И только если многопоточное приложение. Ежели однопоточное - оно у тебя в этом цикле и умрёт.
Функция у тебя загрузит опупенно проц по идее :D Класса - через сигнал-слоты спокойно. Название: Re: Вопрос про функции Отправлено: ilnile от Сентябрь 30, 2013, 21:52 Через сигнал слоты и было, но не очень удобно в моем случае
Я пишу данные в порт, получаю ответ, который попуждает к послед действиям. что мне нужно функция которая посылает в порт запрос, получает ответ и возвращает результат, но как это сделать если я могу послать из функции запрос в порт, а прочитать только по сигналу в другой функции и соответ-но не могу вернуть результат первоначальной функцией. Как это можно реализовать? Название: Re: Вопрос про функции Отправлено: ilnile от Сентябрь 30, 2013, 21:55 По сути что мне надо
Код: int func() { Название: Re: Вопрос про функции Отправлено: mutineer от Сентябрь 30, 2013, 22:15 Это можно сделать через локальный QEventLoop. запускаешь его в своей функции и получаешь возможность обрабатывать сигналы. По нужному сигналу выходишь из лупа и попадаешь опять в свою функцию
Название: Re: Вопрос про функции Отправлено: Igors от Октябрь 01, 2013, 08:38 что мне нужно С точки зрения событийной (event-driven) схемы работа func1 должна быть завершена как только она отдалась в порт. Неизвестно сколько времени ждать, какие еще есть события и.т.п. поэтому сидеть в func1 нехорошо. Если все делать в одной нитке, то нормальное решение - создать func2 принимающую результат из порта. Обычно в таких случаях неприятно то что все переменные что были готовы в func1 (контекст) утеряны в func2. Это не смертельно, придется сохранить контекст в func1. Да, это может быть большая структура, но запуск в др нитке или вторичный eventLoop не дешевлефункция которая посылает в порт запрос, получает ответ и возвращает результат, но как это сделать если я могу послать из функции запрос в порт, а прочитать только по сигналу в другой функции и соответ-но не могу вернуть результат первоначальной функцией. Как это можно реализовать? Название: Re: Вопрос про функции Отправлено: Serr500 от Октябрь 01, 2013, 08:39 что мне нужно Например, на мьютексах. Взводим мьютекс и посылаем запрос в порт, затем ждём освобождения мьютекса. Когда возникает внешнее событие, его обработчик разблокирует мьютекс и наша функция продолжит выполнение. Но внешнее событье должно ловиться в другом потоке, иначе получите deadlock (http://ru.wikipedia.org/wiki/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0). Вместо мьютекса можно использовать семафор. (Кстати, если мне не изменяет память, семафоры в Qt основаны на мьютексах...)функция которая посылает в порт запрос, получает ответ и возвращает результат, но как это сделать если я могу послать из функции запрос в порт, а прочитать только по сигналу в другой функции и соответ-но не могу вернуть результат первоначальной функцией. Как это можно реализовать? |