Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

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

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

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

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

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

А можно ли как-то прервать работу функции get компонента IdHTTP?
giveaway вне форума   Ответить с цитированием
Старый 10.12.2016, 12:51   #5
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 12,399
Репутация: 2542

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Так легко гуглится же куча вариантов.
Например http://stackoverflow.com/a/9537620/964478 с OnWork или просто вызов Disconnect (из другого/основного потока)
Alex11223 на форуме   Ответить с цитированием
Старый 10.12.2016, 20:18   #6
giveaway
Пользователь
 
Регистрация: 15.10.2016
Сообщений: 18
Репутация: -2
По умолчанию

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

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

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

icq: 512-7шесть5
skype: alexp.frl
По умолчанию

Ну так естественно WinAPI есть только на винде.
Наверняка в билдере есть свои обертки, TThread и т.п.
Alex11223 на форуме   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принудительно уничтожить поток(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 06:32
Как правильно завершить поток Des Общие вопросы Delphi 5 08.05.2009 20:56




23:39.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru