Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2016, 23:14   #1
giveaway
Пользователь
 
Регистрация: 15.10.2016
Сообщений: 21
По умолчанию Как принудительно завершить поток скачивания

Пишу утилиту по скачиванию файлов. Нужно, чтобы по нажатию кнопки Pause закачка прекращалась, без выхода из программы (часть с дозакачкой уже мной написана). Как принудительно завершить поток, созданный функцией CreateThread?

Поток создается так: Thread=CreateThread(NULL,0,ThreadFu n,&ThreadData, 0, 0);
Принудительно он завершается так: TerminateThread(Thread,0);
Это приводит к зависанию программы. В принципе в хелпе и не советуют использовать данный способ из-за непредсказуемости поведения. Нужно что-то другое.
giveaway вне форума Ответить с цитированием
Старый 10.12.2016, 09:58   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Нужно чтоб сам поток проверял не требуется ли от него завершится.
waleri вне форума Ответить с цитированием
Старый 10.12.2016, 11:29   #3
giveaway
Пользователь
 
Регистрация: 15.10.2016
Сообщений: 21
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Нужно чтоб сам поток проверял не требуется ли от него завершится.
В одном потоке в цикле идет скачивание неск. файлов и поверка необ-ти завершения. Как завершить поток когда уже запустился шаг цикла? Файлы качаются большого размера. Если поток ушел в сеть, то что получается его уже никак не вернуть (а мне и надо его прервать)?
giveaway вне форума Ответить с цитированием
Старый 10.12.2016, 11:29   #4
giveaway
Пользователь
 
Регистрация: 15.10.2016
Сообщений: 21
По умолчанию

А можно ли как-то прервать работу функции get компонента IdHTTP?
giveaway вне форума Ответить с цитированием
Старый 10.12.2016, 11:51   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так легко гуглится же куча вариантов.
Например http://stackoverflow.com/a/9537620/964478 с OnWork или просто вызов Disconnect (из другого/основного потока)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.12.2016, 19:18   #6
giveaway
Пользователь
 
Регистрация: 15.10.2016
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так легко гуглится же куча вариантов.
Например http://stackoverflow.com/a/9537620/964478 с OnWork или просто вызов Disconnect (из другого/основного потока)
Сработала идея с OnWork. В обработчике этого события поставил IdHTTP1->Disconnect(), пока вроде работает

Всем спасибо!
giveaway вне форума Ответить с цитированием
Старый 11.12.2016, 17:43   #7
giveaway
Пользователь
 
Регистрация: 15.10.2016
Сообщений: 21
По умолчанию

Новая незадача. Напомню, поток у меня создается так: Thread=CreateThread(NULL,0,ThreadFu n,&ThreadData, 0, 0);
И я хочу обеспечить совместимость с Маком. Но оказывается функция CreateThread не идет под Мак, билдер на нее ругается. Куда копать?)
giveaway вне форума Ответить с цитированием
Старый 11.12.2016, 18:13   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так естественно WinAPI есть только на винде.
Наверняка в билдере есть свои обертки, TThread и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принудительно уничтожить поток(TThread) с корректным высвобождением памяти Pcrepair Общие вопросы Delphi 3 05.06.2013 01:49
Как экстренно завершить поток? hon Общие вопросы Delphi 2 28.08.2012 21:18
Indy, принудительно завершить запрос phphel Работа с сетью в Delphi 1 28.07.2011 14:26
Как правильно завершить поток cosmic_call Общие вопросы Delphi 2 13.02.2011 05:32
Как правильно завершить поток Des Общие вопросы Delphi 5 08.05.2009 20:56