Выполнение произвольной фунции в отдельном потоке |
Здравствуйте, гость ( Вход | Регистрация )
Выполнение произвольной фунции в отдельном потоке |
kuler |
28.10.2008, 16:55
Сообщение
#11
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
слегка не подходит тем что может быть дофига всяких комбинаций методов
кроме того нужен доступ к данн другого класса, а это запаришься (шарить переменные), в моем же случае методы вызываются из этого самого класса и имеется прямой доступ (без дополнительных указателей типа classA->var1) |
|
|
Гость_anonymous_* |
28.10.2008, 17:05
Сообщение
#12
|
Гости |
слегка не подходит тем что может быть дофига всяких комбинаций методов кроме того нужен доступ к данн другого класса, а это запаришься (шарить переменные), в моем же случае методы вызываются из этого самого класса и имеется прямой доступ (без дополнительных указателей типа 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 |
|
|
|
kuler |
29.10.2008, 13:02
Сообщение
#19
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
|
|
|
Litkevich Yuriy |
29.10.2008, 13:56
Сообщение
#20
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 26.4.2024, 3:13 |