Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Остановка функции внутри потока 
:(
    Опции темы
hazamov
Дата 24.3.2011, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 24.4.2009

Репутация: нет
Всего: нет



Здравствуйте. Использую потоки TThread, предоставляемые C++ Builder. 
В основной форме вызываю новый поток, который содержит вызов функции:
Основная форма:
Код

void __fastcall TForm1::Button4Click(TObject *Sender)
{
Thread_s=new TThreadSecondary(false);
}



Поток:
Код

FreeOnTerminate=true;
EnterCriticalSection(&CS);
Synchronize(UpdateStartCaption);
check_spur_emissions();
Synchronize(UpdateStopCaption);
LeaveCriticalSection(&CS);


Функция check_spur_emissions() - библиотечная и имеет очень долгий цикл внутри. Вызвав Thread->Terminate(),каким образом мне можно остановить выполнение check_spur_emissions()?
PM MAIL   Вверх
Dem_max
Дата 24.3.2011, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



внимательно посмотреть описание библиотеки возможно там есть функция Cancel check_spur_emissions, иначе никак только грохать или дожидаться окончания.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alca
Дата 24.3.2011, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Функция check_spur_emissions() - библиотечная и имеет очень долгий цикл внутри. Вызвав Thread->Terminate(),каким образом мне можно остановить выполнение check_spur_emissions()?

зачем?

Добавлено через 2 минуты и 38 секунд
Цитата

Код

FreeOnTerminate=true;
EnterCriticalSection(&CS);
Synchronize(UpdateStartCaption);
check_spur_emissions();
Synchronize(UpdateStopCaption);
LeaveCriticalSection(&CS);


Это твой код или VCL-ный?


--------------------
PM WWW ICQ Skype Jabber   Вверх
hazamov
Дата 25.3.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 24.4.2009

Репутация: нет
Всего: нет



Alca, это мой VCL-ный код )

Dem_max, там такой функции нет.  Но допустим появится, тогда как это может мне помочь?
PM MAIL   Вверх
Dem_max
Дата 25.3.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



поможет выйти из check_spur_emissions(); а дальше выйти из потока


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
borisbn
Дата 26.3.2011, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Код

TerminateThread( thread.Handle );

?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
hazamov
Дата 28.3.2011, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 24.4.2009

Репутация: нет
Всего: нет



borisbn, TerminateThread( thread.Handle ) - это экстремальный метод, используется в крайнем случае... не подходит
Dem_max, каким образом остановить? В потоке нет никакого цикла, чтоб я в случае чего вызвал Cancel. Единственная функция check_spur_emissions() - один оператор.. как я убью поток?
PM MAIL   Вверх
borisbn
Дата 28.3.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(hazamov @  28.3.2011,  10:11 Найти цитируемый пост)
TerminateThread( thread.Handle ) - это экстремальный метод, используется в крайнем случае... 

Цитата(hazamov @  28.3.2011,  10:11 Найти цитируемый пост)
как я убью поток?


по-моему, это и есть крайний случай. думаю, что больше вариантов нет.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Alca
Дата 28.3.2011, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

как я убью поток?

чудес не бывает


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1259 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.