Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 26.08.2015
Сообщений: 45
1

Вынести работу с интернетом в отдельный поток

27.06.2016, 21:32. Показов 650. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хотел перенести работу с интернетом в программе в отдельный поток, но что то не могу сообразить.

есть функция допустим

Get(url)
{
выполнить гет на урл
получить ответ
если (ответ == а)
{
captcha(ответ)
вернутся на начало функции дописав к урл капчу
}
иначе
{
вернуть ответ
}
}

как это всё перенести в поток если в функции captcha делается вывод окна с картинкой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2016, 21:32
Ответы с готовыми решениями:

Как вынести работу с SerialPort в отдельный поток?
Подскажите как правильно работать с потоками? Работаю с Serial Com Port, снимаю с него текстовые...

Вынести соединение с БД в отдельный поток
Здравствуйте, уважаемые знатоки. Проблема у меня в следующем, есть программа для работы с БД mySQL,...

Вынести процедуру в отдельный поток
Доброго дня. Есть процедура, в процессе её работы происходит step прогрессбара, разумеется такие...

Как вынести код в отдельный поток?
Как вынести код в отдельный поток?

7
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
28.06.2016, 07:51 2
Цитата Сообщение от KOTYAREG Посмотреть сообщение
как это всё перенести в поток если в функции captcha делается вывод окна с картинкой
Переносите все что нужно в поток. Вывод окна с картинкой выносите в отдельную функцию и в самом потоке вызываете эту функцию чере Synchronize.
0
2 / 2 / 1
Регистрация: 26.08.2015
Сообщений: 45
28.06.2016, 07:56  [ТС] 3
Возможно ли при запуске потока передать ему параметры?
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
28.06.2016, 08:00 4
Цитата Сообщение от KOTYAREG Посмотреть сообщение
Возможно ли при запуске потока передать ему параметры?
Конечно возможно. Либо через конструктор, либо через любую другую созданную самим функцию.
0
2 / 2 / 1
Регистрация: 26.08.2015
Сообщений: 45
28.06.2016, 11:37  [ТС] 5
1. Передаю параметры так:

Кнопка:
C++
1
2
Potokk *Potok = new Potokk( false,url,0);
Potok->FreeOnTerminate = true;
Поток:

C++
1
2
3
4
5
6
__fastcall Potokk ::Potokk (bool CreateSuspended, String _url, int _type)
    : TThread(CreateSuspended)
{
this->url = _url;
this->type = _type;
}
правильно?

2. Как вызвать функцию captcha через Synchronize?
Synchronize(captcha(ответ)) - не работает
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
28.06.2016, 12:52 6
Как вызвать через Synchronize функцию с параметрами я не знаю (если это вообще возможно). Но можно передавать параметры через созданные переменные класса. А вызов осуществлять так:
C++
1
2
3
4
5
6
7
void __fastcall Captcha()
{
 // работа с объектами VCL
}
 
// в потоке
Synchronize(&Captcha);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
28.06.2016, 13:30 7
Цитата Сообщение от d7d1c Посмотреть сообщение
Как вызвать через Synchronize функцию с параметрами
Synchronize должна получить указатель на метод, соответствующий определенному прототипу, а не результат выполнения этого метода (что и происходит при попытке вызвать captcha(ответ) в 5-ом посте.

В Дельфи можно было бы сделать так:
Delphi
1
2
3
4
5
Synchronize(
  procedure // анонимный метод
  begin
    captcha(parameters);
  end);
, в Билдере подобный функционал недоступен.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
28.06.2016, 14:43 8
Цитата Сообщение от volvo Посмотреть сообщение
Билдере подобный функционал недоступен
Ну вот как я и подозревал, что это не возможно. А жаль...
0
28.06.2016, 14:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2016, 14:43
Помогаю со студенческими работами здесь

Как вынести подключение к БД в отдельный поток?
Как вынести подключение бд в отдельный поток???Вот код программы: import android.os.Bundle;...

Вынести загрузку и парсинг в отдельный поток
Ребята,привет. Есть приложение,калькулятор и есть активность валюта,где конвертация валюты...

Как вынести скачивание файлов в отдельный поток?
Всем привет. При старте приложения мне нужно скачать некоторый объем информации из интернета. Делаю...

Вынести часть работы приложения в отдельный поток
Друзья, вот столкнулся с такой проблемой. У меня нормальный процессор, все программы быстро...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru