Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: OKTA от Сентябрь 13, 2012, 15:24



Название: Вызов ф-ии с return из потока
Отправлено: OKTA от Сентябрь 13, 2012, 15:24
ПОдскажите пожалуйста, как оптимальнее осуществить следующее действо! Из одного потока я вызываю функцию класса из другого потока и жду результата ее выполнения! Но соответственно, приходится ждать, пока до обработки ф-ии дойдет очередь! А как сделать, чтобы ф-ия обрабатывалась сразу же?? Через Q_Invokable с Qt::BlockingQueedConnection не катит, ибо не работает с ф-ями, которые возвращают значение(хотя я кажется не совсем понимаю, как эта связка должна работать между потоками).


Название: Re: Вызов ф-ии с return из потока
Отправлено: Пантер от Сентябрь 13, 2012, 15:25
Используй сигнало-слотовую связь.


Название: Re: Вызов ф-ии с return из потока
Отправлено: OKTA от Сентябрь 13, 2012, 15:27
Но ведь с сигналами и слотами не получится просто взять и вернуть значение ф-ии - придется слать сигнал, в другом потоке его ловить, вызывать слот, а обратно опять сигналом?


Название: Re: Вызов ф-ии с return из потока
Отправлено: Serr500 от Сентябрь 13, 2012, 15:31
А если передать в сигнале параметром указатель на буфер, который примет результат?


Название: Re: Вызов ф-ии с return из потока
Отправлено: Igors от Сентябрь 13, 2012, 15:40
Ну чтобы "выполнялась сразу" - дело нехитрое, просто вызвать ф-цию или использовать DirectConnection. Др вопрос насколько это безопасно. Напр если др нитка пишет какие-то данные, то они могут оказаться невалидными. Надо думать как лочить/разлочить, т.к. Blocking - удовольствие дорогое


Название: Re: Вызов ф-ии с return из потока
Отправлено: OKTA от Сентябрь 13, 2012, 15:45
передавать указатель - уже интереснее)
А разве простой вызов ф-ии гарантирует, что она выполнится сразу же??


Название: Re: Вызов ф-ии с return из потока
Отправлено: mutineer от Сентябрь 13, 2012, 15:55
передавать указатель - уже интереснее)
А разве простой вызов ф-ии гарантирует, что она выполнится сразу же??

Гарантирует, но выполнится она в том потоке, откуда ее вызвали


Название: Re: Вызов ф-ии с return из потока
Отправлено: OKTA от Сентябрь 13, 2012, 16:01
опять эта подстава!) никак не могу разобраться ((