![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
iron-cat |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 5.3.2014 Пользователь №: 4071 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ребята, хелп!
Короче, я программирую в С++, но делаю там сугубо физические расчеты, строю гистограммки. Никогда не занималась поточным программированием! При приеме на работу задали тестовое задание, а я не знаю, как к нему подобраться..(( Задание такое: Написать простое многопоточное приложение на C/C++, которое бы делало следующее: 1) в основном потоке читает непрерывно какую-либо информацию (например, текст из файла) и показывает его 2) сразу после запуска порождает несколько нитей. В процессе чтения информации каждой из нитей посылается текущий блок данных (очередная порция текста). Каждая нить выполняет определенное действие с пришедшей информацией (например, одна нить дублирует каждый символ, а вторая удаляет первый символ), и возвращает результат в основной поток, в котором демонстрируется результаты работы каждой нити. 3) Для оценки работы многопоточности нужно предусмотреть определенную задержку обработки каждой порции информации для каждой из нитей (вставить явно временную задержку у нити). По сути это эмулятор программы онлайн обработки информации: читается непрерывно например видеопоток, и разные модули с разной скоростью обработки делают с каждым кадром определенные действия, при этом в главном потоке не должно быть задержек с просмотром ”сырой” информации. Вот... Скачала и установила в убунту qt5.2, создала проект, файлы с расширением h,cpp и pro. Читала про класс QThreads, но так и не знаю, как мне к заданию подобраться!!! Какое-то все мудреное... Я так и не усвоила смыслы потоков... По-своему я бы просто тупо макрос в С++ написала, исмпользуя только классы String и File, но боюсь, работодателей такое не устроит... Помогите кто чем может! Не умею я одна с литературой работать пока...(( Начала писать код... Наверное бред пишу... Не знаю... Как правильно написать две нитки и их связь с основным потоком??? И поправляйте меня!
|
|
|
Trisch |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
Ну как вариант. Для каждой нити создаешь свой класс унаследованный от QThread() и запускать примерно так как сделано выше.
Но лучше для основного потока тоже сделать свой класс и только на него создать объект в функции main(). И
следует раскоментировать. Взаимодействие между потоками можно реализовывать с помощью сигналов и слотов. |
|
|
Гость_Гость_Анна_*_* |
![]()
Сообщение
#3
|
Гости ![]() |
Для замены символов наверное QString использовать?
А как создать общий основной поток? Вот я этого и не понимаю! И еще: как правильно использовать таймер? |
|
|
smartchecker |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 83 Регистрация: 7.9.2011 Пользователь №: 2853 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Сначала, бы нужно просто что-то про потоки почитать.
Вот для затравки http://habrahabr.ru/post/150274/ |
|
|
Гость_Гость_Анна_*_* |
![]()
Сообщение
#5
|
Гости ![]() |
Сначала, бы нужно просто что-то про потоки почитать. Вот для затравки http://habrahabr.ru/post/150274/ Я почитала, спасибо. Я уже 3 дня читаю про потоки, но как в них загонять информацию не пойму! |
|
|
Trisch |
![]()
Сообщение
#6
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
Главный поток обычно создается в main(). К примеру так:
то есть a.exec() создает поток, в данном случае главный поток. Передавать инфу между потоками можно с помощь сигналов и слотов или высылки событий QCoreApplication::postEvent() и QCoreApplication::sendEvent(). Как по мне первый вариант лучше. А что с таймером не так? Для запуска, остановки используется QTimer::start() QTimer::stop(). Раз в цикл таймер посылает сигнал QTimer::timeout(), который надо прикрутить к слоту, который выполняет определенное действие по таймеру. |
|
|
Гость_Гость_Анна_*_* |
![]()
Сообщение
#7
|
Гости ![]() |
Спасибо, ребята. Напишу - ввыложу. Сегодня-завтра... Нету у меня, елки, еще поточного мышления...))))
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
iron-cat,
Главный поток обычно создается в main() Он не "обычно" в main() создаётся. А сама функция main() выполняется в главном потоке приложения.Вообще последняя рекомендация по потокам в Qt - совать объекты в поток с помощью moveToThread(), вместо создания наследников от QThread. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 21:02 |