Russian Qt Forum
Октябрь 01, 2024, 07:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос про функции  (Прочитано 3203 раз)
ilnile
Гость
« : Сентябрь 30, 2013, 21:36 »

Код:
int func1() {
    while(1)
        if (ok == 1) {
            return 1;
        }
}

Как реализовать подобный подход?
Мне нужно чтобы при выполнении функции она вернула результат по внешнему событию.
Это вообще возможно?
Записан
Bepec
Гость
« Ответ #1 : Сентябрь 30, 2013, 21:48 »

Функции - если только через глобальную переменную, способ ты сам написал. И только если многопоточное приложение. Ежели однопоточное - оно у тебя в этом цикле и умрёт.

Функция у тебя загрузит опупенно проц по идее Веселый

Класса - через сигнал-слоты спокойно.

 
Записан
ilnile
Гость
« Ответ #2 : Сентябрь 30, 2013, 21:52 »

Через сигнал слоты и было, но не очень удобно в моем случае
Я пишу данные в порт, получаю ответ, который попуждает к послед действиям.

что мне нужно
функция которая посылает в порт запрос, получает ответ и возвращает результат, но как это сделать если я могу послать из функции запрос в порт, а прочитать только по сигналу в другой функции и соответ-но не могу вернуть результат первоначальной функцией.
Как это можно реализовать?
Записан
ilnile
Гость
« Ответ #3 : Сентябрь 30, 2013, 21:55 »

По сути что мне надо
Код:
int func() {
данные > порт;
жду пока придет ответ
если пришел то
return ответ*10;
}

Записан
mutineer
Гость
« Ответ #4 : Сентябрь 30, 2013, 22:15 »

Это можно сделать через локальный QEventLoop. запускаешь его в своей функции и получаешь возможность обрабатывать сигналы. По нужному сигналу выходишь из лупа и попадаешь опять в свою функцию
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Октябрь 01, 2013, 08:38 »

что мне нужно
функция которая посылает в порт запрос, получает ответ и возвращает результат, но как это сделать если я могу послать из функции запрос в порт, а прочитать только по сигналу в другой функции и соответ-но не могу вернуть результат первоначальной функцией.
Как это можно реализовать?
С точки зрения событийной (event-driven) схемы работа func1 должна быть завершена как только она отдалась в порт. Неизвестно сколько времени ждать, какие еще есть события и.т.п. поэтому сидеть в func1 нехорошо. Если все делать в одной нитке, то нормальное решение - создать func2 принимающую результат из порта. Обычно в таких случаях неприятно то что все переменные что были готовы в func1 (контекст) утеряны в func2. Это не смертельно, придется сохранить контекст в func1. Да, это может быть большая структура, но запуск в др нитке или вторичный eventLoop не дешевле
Записан
Serr500
Гость
« Ответ #6 : Октябрь 01, 2013, 08:39 »

что мне нужно
функция которая посылает в порт запрос, получает ответ и возвращает результат, но как это сделать если я могу послать из функции запрос в порт, а прочитать только по сигналу в другой функции и соответ-но не могу вернуть результат первоначальной функцией.
Как это можно реализовать?
Например, на мьютексах. Взводим мьютекс и посылаем запрос в порт, затем ждём освобождения мьютекса. Когда возникает внешнее событие, его обработчик разблокирует мьютекс и наша функция продолжит выполнение. Но внешнее событье должно ловиться в другом потоке, иначе получите deadlock. Вместо мьютекса можно использовать семафор. (Кстати, если мне не изменяет память, семафоры в Qt основаны на мьютексах...)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.129 секунд. Запросов: 23.