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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помощь по нитям  (Прочитано 6555 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Сентябрь 06, 2007, 11:25 »

Никак не могу разобраться с работой нитей в куте. Как, допустим, мне запихнуть функцию в поток?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Сентябрь 06, 2007, 11:41 »

Весь код, который должен выполниться в потоке, помещаеться в метод run()

Код:
class YourThread : public QThread
 {
 public:
     void run();
 };

 void YourThread::run()
 {
     //your  code
 }

Подробнее читаем в асисстанте или в Бланшетте
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Сентябрь 06, 2007, 12:01 »

Это я понял. Есть у меня главный класс, в нем функция, которая обращается к другим функциям, данным ЭТОГО класса. Как мне закинуть ее в Run?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
dilshodm
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #3 : Сентябрь 06, 2007, 15:08 »

Цитировать
Это я понял. Есть у меня главный класс, в нем функция, которая обращается к другим функциям, данным ЭТОГО класса. Как мне закинуть ее в Run?

Надо просто вызвать необходимую public функцию из метода run()
Только она  (функция и, соотвественно, класс, ее содержащий) должна быть thread-safe, т.е. надо применять мютексы для исключения одновременного изменения данных.
Записан

С уважением,
Dilshod
Tonal
Гость
« Ответ #4 : Сентябрь 06, 2007, 15:26 »

По поводу синхронизации читать это: http://tula.bofh.ru/articles/184 (осторожно, ненормативная лексика)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Сентябрь 06, 2007, 17:39 »

По поводу синхронизации читать это: http://tula.bofh.ru/articles/184 (осторожно, ненормативная лексика)

Улыбающийся Спасибо, это уже не раз изучал, хотя и не таким доступным языком. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Сентябрь 06, 2007, 17:53 »

Цитировать
Это я понял. Есть у меня главный класс, в нем функция, которая обращается к другим функциям, данным ЭТОГО класса. Как мне закинуть ее в Run?

Надо просто вызвать необходимую public функцию из метода run()
Только она  (функция и, соотвественно, класс, ее содержащий) должна быть thread-safe, т.е. надо применять мютексы для исключения одновременного изменения данных.

А можно немного поподробнее? Есть у меня класс:
class MainWindowImpl : public QMainWindow
{
public:
    void updateFileList(const QString qsPath)
     {
          ..............
          Добавление в QTableWidget
     }
}
Как эту функцию вызвать из треда? Ведь в данном случае в треде нужно создать экземпляр класса? Или как?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Сентябрь 06, 2007, 18:45 »

Как эту функцию вызвать из треда? Ведь в данном случае в треде нужно создать экземпляр класса? Или как?

Так нельзя. Прога у тебя упадет. Из другого потока нельзя обращаться напрямую к гуёвым элементам. Общаться между твоим и гуёвым потоком можно, например, через эвенты. Читаешь данные в потоке и при помощи эвента передаещь в гуевый поток.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Сентябрь 06, 2007, 18:58 »

Спасибо всем за помощь. Буду как-нибудь раскапывать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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