Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
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) Link слегка не подходит тем что может быть дофига всяких комбинаций методов кроме того нужен доступ к данн другого класса, а это запаришься (шарить переменные), в моем же случае методы вызываются из этого самого класса и имеется прямой доступ (без дополнительных указателей типа classA->var1) Глянь Link или Link |
|
|
|
|
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) Link QtConcurrent Жаль это толко в Qt 4.4.*, я еще толком про этот класс не читал.
|
|
|
|
|
kuler |
29.10.2008, 13:02
Сообщение
#19
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1
|
Цитата(Tonal @ 29.10.2008, 11:33) Link или в идле. это чо такое? |
|
|
|
|
Litkevich Yuriy |
29.10.2008, 13:56
Сообщение
#20
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(kuler @ 29.10.2008, 16:02) Link это чо такое? idl
|
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 1.1.2026, 2:09 |