![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Fitz |
![]() ![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 22.11.2010 Пользователь №: 2207 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Уважаемые, хочу прикрутить к терминалу COM-порта ProgressBar загрузки файла в порт.
Сделав, соответстветственно, загрузку файла отдельным потоком. Заюзал Qt'шный экзампл Progress Dialog, где используют QtConcurrent. Код: mainwindow.h
mainwindow.cpp
Компилятор ругается в futureWatcher.setFuture(QtConcurrent::map(fileList, MainWindow::loadFile));, мол там нужен адрес функции, однако и подстановка адреса не помогает. Что делаю не так? Возможно есть более грамотное решение с QThread, подскажите. |
|
|
BRE |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
А ты посмотри в примерах, как определены функции для QtConcurrent::map. Являются ли они членами класса, как у тебя.
|
|
|
Fitz |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 22.11.2010 Пользователь №: 2207 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
В примерах вообще класс не создается - просто некоторая (normal) функция и ее вызов через QtConcurrent в main().
Но насколько я понял из доки необходимо, чтобы функция void loadFile(const QString &fileName); была статической и принималась еще и по указателю. Using Member Functions Раскрывающийся текст QtConcurrent::map(), QtConcurrent::mapped(), and QtConcurrent::mappedReduced() accept pointers to member functions. The member function class type must match the type stored in the sequence:
Причем не важно членом какого класса она является. Я прав? |
|
|
BRE |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Внимательно посмотри на приведенные примеры. Посмотри, что является входным параметром, с объектом какого класса происходит операция и с использованием какого метода.
Например, первый фрагмент: Входные данные: strings - список строк; Класс объекта для которого выполняется операция: QString - строка; Какой метод применяется: QString::squeeze. |
|
|
Fitz |
![]()
Сообщение
#5
|
Студент ![]() Группа: Новичок Сообщений: 13 Регистрация: 22.11.2010 Пользователь №: 2207 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
После осознания наваял следующую конструкцию, котороая, как ни странно, заработала.
Создал отдельный класс прошивки: ufirmware.h
ufirmware.cpp
Теперь применение: mainwindow.cpp
Вопрос раз: необходимо ли делать класс uFirmware потокобезопасным? Вопрос два: код работает не совсем так, как мечталось - futureWatcher вычисляет только работу метода класса, а вот используемый им метод сторонней библиотеки AbstractSerial::write(QByteArray a)(в интересах которого, собственно, и выделяется отдельный поток) в расчет не берется. Выходит надо работать напрямую с классом AbstractSerial? Но тогда каким образом передавать методу записи в порт write(QByteArray a) этот внешний параметр? |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.7.2025, 18:23 |