crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Выполнение произвольной фунции в отдельном потоке
kuler
  опции профиля:
сообщение 28.10.2008, 16:55
Сообщение #11


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


слегка не подходит тем что может быть дофига всяких комбинаций методов

кроме того нужен доступ к данн другого класса, а это запаришься (шарить переменные), в моем же случае методы вызываются из этого самого класса и имеется прямой доступ (без дополнительных указателей типа classA->var1)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_anonymous_*
сообщение 28.10.2008, 17:05
Сообщение #12





Гости








    


Цитата(kuler @ 28.10.2008, 16:55) *
слегка не подходит тем что может быть дофига всяких комбинаций методов

кроме того нужен доступ к данн другого класса, а это запаришься (шарить переменные), в моем же случае методы вызываются из этого самого класса и имеется прямой доступ (без дополнительных указателей типа classA->var1)


Глянь здесь или здесь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.10.2008, 17:25
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


2 Гость_anonymous_*, ему всетаки не задержка нужна, перво причина:
выполнить несколько произвольных функций, подряд, в нутри некого класса. Причем функции могут этому классу не принадлежать. А ГУЙ недолжен умереть.

kuler, я правильно понял?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 28.10.2008, 18:20
Сообщение #14


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


да, хотелось бы как то вообще просто делать - типа запускаешь функцию и говоришь "в отдельном потоке" и не надо никаких run. Ибо нужно к примеру 20 разных функций в потоках вызывать (по отдельности), не делать же теперь двадцать классов, потомков потока, можно свитчем делать - тоже некрасиво, и передачу параметров просто так не осуществишь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.10.2008, 19:41
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


У меня крутится в голове мысль, но она только на половинку :) Вторую половинку надо додумать.

Итак:
Надо оставить тот класс который я привел (MyTread), в нем нужно реализовать функцию типа "жуй (ешь)", а также один сигнал "готово".
В своем класе зарание создаешь слот и соеденяешь его с сигналом MyTread::готово(). И создаешь объект типа MyTread, передаешь в функцию "жуй" другую функцию, которую пожевать надо.
Функция "жуй" говорит собственному классу (MyTread) какая функция находится в нутри MyTread::run() и вызывает метод QTread::start()
Ты в это время что-то полезное делаешь в своем классе.
Когда выполнится целевая функция посылается сигнал "готово".
При срабатывании слота, если необходимо, говоришь опять "жуй" с новой функцией.

P.S. выделенное курсивом надо додумать. А метода получается универсальной, т.е. в других классах/программах можно повторно использовать.
(собственно как функцию передовать? Функция произвольная - указатель какой-то универсальный надо)

P.P.S. Тему переименовал, ближе к задаче.

Есть такой метод:
void QObject::moveToThread ( QThread * targetThread )
может есть и готовый для конкретных функций, надо поковырятся в асистенте.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 29.10.2008, 10:31
Сообщение #16


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Litkevich Yuriy,
а как предлагаешь параметры в функцию передавать? а в готово будет switch, тк сценарии действия после вызова разных функций различны
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 29.10.2008, 11:33
Сообщение #17


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Цитата
QFuture<T> QtConcurrent::run ( Function function, ... )

Runs function in a separate thread. The thread is taken from the global QThreadPool. Note that the function may not run immediately; the function will only be run when a thread is available. ...

Оно?

Да, ждать пока выполнится функция в другом потоке чтобы гуй не замерзал нужно или крутя Application->processEvents() или опрашивая статус завершения по таймеру или в идле.

Сообщение отредактировал Tonal - 29.10.2008, 11:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.10.2008, 11:42
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Tonal @ 29.10.2008, 14:33) *
QtConcurrent
Жаль это толко в Qt 4.4.*, я еще толком про этот класс не читал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 29.10.2008, 13:02
Сообщение #19


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Tonal @ 29.10.2008, 11:33) *
или в идле.

это чо такое?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.10.2008, 13:56
Сообщение #20


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 29.10.2008, 16:02) *
это чо такое?
idl
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.4.2024, 3:13