Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.90
HIMen
4150 / 1399 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
#1

Как завершить поток - C++

19.05.2009, 11:09. Просмотров 4453. Ответов 5
Метки нет (Все метки)

Как завершить поток, начатый _beginthread( Thread, 0, NULL );
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2009, 11:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как завершить поток (C++):

Как корректно завершить COM порт? - C++
Здравствуйте. Пишу программу на С++ CLR для считывания с устройства пакетов данных. Но тут напоролся на проблему, которую не могу...

Как завершить программу из функции? - C++
предположим я объявил функцию void function(char* s) { \\код \\а тут мне надо завершить прогу. return 0; } компилятор...

Как завершить цикл в OpenMP - C++
Использую OpenMP для параллельных расчетов очень нужно при определенном условии экстренно завершить цикл break; с OpenMP не...

ExitProcess как правильно завершить процесс? - C++
Есть цикл, в котором поочередно открываются процессы. при использовании ExitProcess(0) выкидывает из программы, открытые процессы остаются.

Как завершить ввод данных с клавиатуры - C++
Всем доброго времени суток. Я изучать С начал недавно.Изучаю при помощи "Язык программирования С++.Вводный курс." Скажите как...

Программа, имитирующая память компьютера, как завершить? - C++
Жутко нужна программа, которая имитирует память компьютера, ниже представлен код, ошибок нет, но надо завершить его. Программа имитирует...

5
Phantom
Эксперт С++
3165 / 847 / 16
Регистрация: 29.12.2008
Сообщений: 952
19.05.2009, 11:20 #2
С помощью _endthread.

_beginthread(ThreadRoutine, 0, (void*)(Param));
Здесь запускается задача, функция которой имеет имя ThreadRoutine. Ей передается в качестве параметра значение Param.
Функция ThreadRoutine должна выглядеть следующим образом:

void ThreadRoutine(void *Param)
{
. . .
_endthread();
}
Заметим, что для завершения задачи здесь используется функция _endthread, не имеющая параметров. С помощью этой функции вы можете завершить задачу в любом месте функции задачи. Однако в приведенном выше фрагменте функцию _endthread можно было бы и не использовать, так как операция возврата из функции задачи также приведет к неявному вызову функции _endthread и, как следствие, к завершению задачи.
Взято из этой статьи.
0
Rififi
2360 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
19.05.2009, 11:25 #3
HANDLE h = reinterpret_cast<HANDLE>(_beginthreadex...);
TerminateThread(h);
1
HIMen
4150 / 1399 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.05.2009, 12:17  [ТС] #4
Мне надо завершить поток из функции main.
А какой второй параметр у TerminateThread()?
0
Rififi
2360 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
19.05.2009, 12:24 #5
TerminateThread
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
19.05.2009, 12:38 #6
Вообще, все предложенные способы (_endthread(), TerminateThread()) - это методы "грубой силы", очень жесткие, с высоким риском оставить всю остальную часть программы в непредсказуемом состоянии, а для данных, обрабатываемых несчастным потоком - риск навсегда потерять эти данные.

Наиболее корректный способ завершить поток - это подать ему сигнал к завершению и дождаться, когда он спокойно "умрет своей смертью".
0
19.05.2009, 12:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2009, 12:38
Привет! Вот еще темы с ответами:

Как правильно завершить char array (Null terminated) - C++
В гугле вижу самые разные примеры. char* chs = new char; ... chs = '\0'; // Разве 128 существует ? ... delete chs; пробовал...

Скопировать поток и добавить ошибки в поток - C++
Здорова господа! Есть задачка: &quot;Скопируйте поток объектов типа Name_and_address и вставьте в него столько ошибок, сколько сколько...

Статический метод как точка входа в поток - как избавиться - C++
Привет всем.Вопрос такой: использую потоки в своей программе,они создаются и уничтожаются в классе, и в классе так же находится...

Как завершить сеанс Dialup-connecta ("9955555_MTU.DUN") в Win98(ME) ? - C++
Моя программа принимает и отправляет почту (SMTP &amp; POP3) Для этого предварительно устанавливаю по телефонной линии соединение с...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.