![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 2 Всего: 33 |
Подскажите, как правильно завершить оного?
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
TerminateThread()
что значит корректно? все данные в стеке потока убьются, данные в TLS убьются, данные в хипе останутся, данные в секции данных тоже останутся, впрочем обо всем этом написано в msdn напиши откуда ты собрался его завершать. если извне - только TerminateThread() если из самого потока, то либо return в функции потока, либо ExitThread в любом месте алсо, остановить или завершить? Это сообщение отредактировал(а) GoldFinch - 14.5.2009, 15:12 |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 2 Всего: 33 |
Да. Извне. Завершить. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Lazin |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
не стоит использовать CreateThread, вместо этого нужно использовать beginthread beginthreadex, так как они инициализируют структуры данных в TLS, которые необходимы стандартной библиотеке, CreateThread этого не делает...
использовать нельзя, после вызова этой ф-ии твое приложение может некорректно работать
то-же не стОит
что-бы корректно завершить поток, нужно сообщить ф-ии потока, что пора завершаться, к примеру
либо можно использовать сообщения windows
|
||||||||
|
|||||||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
Lazin, если приложение некорректно работает после TerminateThread() это недочет программиста, а не проблемы api функции
есть еще такой вариант завершения:
однако это не избавит от "If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread's process could be inconsistent" но такие вобщем-то редкие случаи можно обрабатывать отдельно, флаги выставлять например Добавлено через 2 минуты и 37 секунд еще можно хранить все выделенные потоком ресурсы\память в глобальном объекте, и убивать их после TerminateThread() |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
||||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: нет Всего: 306 |
GoldFinch С Lazin'ым согласится старик Рихтер.
andrew_121, собственно он же рекомендует использовать beginthreadex вместо CreateThread |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
GoldFinch, слушай что профи говорит (Lazin)
Добавлено @ 16:08 Можно еще ивенты заюзать. Это сообщение отредактировал(а) Alca - 14.5.2009, 16:09 |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 4 Всего: 23 |
andrew_121, собстевнно я согласен с Lazin, Alca
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
andrew_121
забудь про TerminateThread. Поток нужно завершать изнутри, а как сказать своему потоку что он должен завершится смотри пост Lazin. В принципе подойдет любой механизм обмена сообщениями между потоками. а еще exit(0) и TerminateProcess вместо return 0; нахрена вообще придумали нормальное завершение процессов и потоков..всех поубивать |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
all
вы решаете только те задачи которые придумываете сами? если есть задача убить поток извне - значит ее надо решать, а не говорить "Поток нужно завершать изнутри" задача ТС звучит "Поток нужно завершать ИЗВНЕ" почему именно извне? если вы не можете придумать такую ситуацию, это не говорит что таких ситуаций нет |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 5 Всего: 211 |
я лично решаю задачи за которые мне платят, а на форуме отвечаю на вопросы - которые поставлены.
замечательно...где в вопросе сказано что поток надо убить? если ты считаешь что правильным завершением потока является убийство - это твое право.
не творческие мы личности..что поделать |
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
Завершать потоки убийством крайне плохая идея. У нас есть сервис с ватч догом на работе, один поток котролирует другие (около 150 потоков крутится). Если поток не отвечает своевременно то, его убивают. Итогом этого служит что сервис может работать месяцами, но в определенный момент (после треминайт трейд) начинается коллапс, и все потоки начинают сыпаться.... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: нет Всего: 52 |
А если в потоке стоит получение данных через блокирующий сокет? То бишь аля:
Тогда что предлогается? Засунуть цикл в другой цикл, который будет ловить сообщения для потока? А если собщение придёт(а так скорее всего и будет), в момент когда будет вызвана блок. функция recv() ? CloseHandle - почему не подойдёт? ИМХО: способов много, но надо применять каждому для своей ситуации и нету "правильного" способа, как нет "правильного" синглтона. -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: нет Всего: 306 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |