С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 03.04.2020
Сообщений: 4

Не могу передать параметр в поток

10.08.2020, 20:18. Показов 6220. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу шифратор файлов. Пытаюсь сделать, чтобы в процессе шифрования отображался прогресс на прогресс баре.
Вот код функции обновления прогресс бара, которая находится в классе CryptOp

C++
1
2
3
4
void CryptOp::getProgress(System::Windows::Forms::ProgressBar^ progressBar) {
    float pr = (sent * 1.0) / (fsize * 1.0) * 1000;
    progressBar->Value = (int)pr;
}
А это часть кода формы, где я пытаюсь вызвать эту функцию в потоке.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private: System::Void StartCrypt_Click(System::Object^ sender, System::EventArgs^ e) {
        CryptOp Crypter;
        int progress = 0;
        std::string path = msclr::interop::marshal_as<std::string>(filePath->Text);
        std::string key = msclr::interop::marshal_as<std::string>(key_textBox->Text);
        int num_of_threads = Int32::Parse(threads_number->Text);
        if (path != "" && key != "") {
            unsigned long long adapted_key = Crypter.adaptKey(key);
            if (path.substr(path.rfind('.')) != ".crptd") {
                std::thread th1(&CryptOp::Encrypt, Crypter, path, adapted_key, num_of_threads);
                th1.detach();
            //  Crypter.getProgress(progressBar);
                std::thread th2(&CryptOp::getProgress, Crypter, progressBar);
            } else {
            
            }
        } else MessageBox::Show("Введены не все данные");
    
    }
Когда я вызываю функцию напрямую,
C++
1
Crypter.getProgress(progressBar);
то никаких проблем не возникает и все работает как надо. Но вот при попытке использовать поток
C++
1
std::thread th2(&CryptOp::getProgress, Crypter, progressBar);
в коде программы подчеркивается красным символ '&' и выдается 2 ошибки


Ошибка (активно) E0289 отсутствуют экземпляры конструктора "std::thread::thread", соответствующие списку аргументов типы аргументов: (void (CryptOp::*)(System::Windows::Forms::Pro gressBar ^progressBar), CryptOp, System::Windows::Forms::ProgressBar ^)

Ошибка C2664 "std::thread::thread(const std::thread &)": невозможно преобразовать аргумент 3 из "System::Windows::Forms::ProgressBar ^" в "System::Windows::Forms::ProgressBar ^&"

Поток th1 выше работает нормально. В чем моя ошибка? Как исправить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2020, 20:18
Ответы с готовыми решениями:

Передать параметр в поток
Здравствуйте! Потребовалось передать указатель на переменную в поток (для последующего изменения значения переменной). Возникли траблы:...

Передать параметр в поток
Здравствуйте. Для существующей процедуры вывода списка кнопок необходимо сделать передачу параметра соответствующего функционалу кнопки. ...

Как передать параметр в поток
Здравтсвуйте, есть функция, принмающая строку и хочу, чтобы она заработала в новом потоке - как можно это сделать? Если функция не...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.08.2020, 20:18
Помогаю со студенческими работами здесь

Как передать параметр в поток?
Здравствуйте, помогите с кодом, сделал так, оно выводит 200 раз по 200 строк, а необходимо что бы сразу запустилось 200 потоков и в каждом...

Как передать параметр в поток
Мне надо передать ListView1.SelectedItems(0).SubItems.Item(2).Text в новый поток, как это сделать ? Dim pt As New...

Передать метод как параметр в поток
Добрый день. Мне нужно передать в параметр метода метод Есть вот такой делегат public delegate int stringComparison(String A, String...

Передать параметр по ссылке в новый поток (REF)
Доброго времени суток, нужен аналог передачи параметра по ссылке при инициализации нового потока C#, в c++ делается элементарно - ...

AlertDialog не могу передать параметр
Здравствуйте, при создании диалога (new AlertDialog(this)) в скобках выдается ошибка. Как ее исправить ? Спасибо за помощь


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru