Russian Qt Forum
Ноябрь 23, 2024, 15:21
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Помощь по нитям
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Помощь по нитям (Прочитано 6558 раз)
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Помощь по нитям
«
:
Сентябрь 06, 2007, 11:25 »
Никак не могу разобраться с работой нитей в куте. Как, допустим, мне запихнуть функцию в поток?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: Помощь по нитям
«
Ответ #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
Сообщений: 5876
Жаждущий знаний
Re: Помощь по нитям
«
Ответ #2 :
Сентябрь 06, 2007, 12:01 »
Это я понял. Есть у меня главный класс, в нем функция, которая обращается к другим функциям, данным ЭТОГО класса. Как мне закинуть ее в Run?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
dilshodm
Новичок
Offline
Сообщений: 18
Re: Помощь по нитям
«
Ответ #3 :
Сентябрь 06, 2007, 15:08 »
Цитировать
Это я понял. Есть у меня главный класс, в нем функция, которая обращается к другим функциям, данным ЭТОГО класса. Как мне закинуть ее в Run?
Надо просто вызвать необходимую public функцию из метода run()
Только она (функция и, соотвественно, класс, ее содержащий) должна быть thread-safe, т.е. надо применять мютексы для исключения одновременного изменения данных.
Записан
С уважением,
Dilshod
Tonal
Гость
Re: Помощь по нитям
«
Ответ #4 :
Сентябрь 06, 2007, 15:26 »
По поводу синхронизации читать это:
http://tula.bofh.ru/articles/184
(осторожно, ненормативная лексика)
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Помощь по нитям
«
Ответ #5 :
Сентябрь 06, 2007, 17:39 »
Цитата: Tonal от Сентябрь 06, 2007, 15:26
По поводу синхронизации читать это:
http://tula.bofh.ru/articles/184
(осторожно, ненормативная лексика)
Спасибо, это уже не раз изучал, хотя и не таким доступным языком.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Помощь по нитям
«
Ответ #6 :
Сентябрь 06, 2007, 17:53 »
Цитата: Dilshod Mukhtarov от Сентябрь 06, 2007, 15:08
Цитировать
Это я понял. Есть у меня главный класс, в нем функция, которая обращается к другим функциям, данным ЭТОГО класса. Как мне закинуть ее в 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
Сообщений: 2901
Re: Помощь по нитям
«
Ответ #7 :
Сентябрь 06, 2007, 18:45 »
Цитата: panter_dsd от Сентябрь 06, 2007, 17:53
Как эту функцию вызвать из треда? Ведь в данном случае в треде нужно создать экземпляр класса? Или как?
Так нельзя. Прога у тебя упадет. Из другого потока нельзя обращаться напрямую к гуёвым элементам. Общаться между твоим и гуёвым потоком можно, например, через эвенты. Читаешь данные в потоке и при помощи эвента передаещь в гуевый поток.
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Помощь по нитям
«
Ответ #8 :
Сентябрь 06, 2007, 18:58 »
Спасибо всем за помощь. Буду как-нибудь раскапывать.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...