· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› какими способами моно закрыть Thread?

Посл.отвђт Сообщенiе


Дата: Июн 4, 2004 20:59:06

Например я хочу при нажатии кнопки закрыть поток.
Как это сделать?

p.s. Я нашёл токо один способ: в потоке цыклически проверять буфер на пустату, если там будет 1 - то на выход.

Есть ли другие способы?


Дата: Июн 4, 2004 21:14:49

что-то не понял, откуда закрыть то нужно ?
TerminateThread ?
ну чуть подробнее ...


Дата: Июн 4, 2004 21:26:40

CreateThread, поток


Дата: Июн 4, 2004 21:28:27

Создаешь поток - имеешь его хэндл.
При нажатии на кнопку - TerminateThread(HANDLE)


Дата: Июн 4, 2004 21:54:11

n0p, спасибо! :)

p.s. но в инете часто жалуются, что не коректно закрывает.


Дата: Июн 4, 2004 23:32:49

хм.. что значит жалуются ?
Использовать функцию TerminateThread не рекомендуется.
Почему: читай MSDN. :P


Дата: Июн 5, 2004 15:01:22

"не рекомендуется.."
Жить в крупных городах тоже не рекомендуется.
Сколько прибивал потоки таким способом - ниразу проблем не знал ни на какой винде. Надо только голову прикладывать, а не просто отстреливать. Ясен хобот, если во время записи на диск это сделать, можно и винт убить, но для таких особых случаев можно и поизвращаться с флагами. А в обычной ситуации можно и так.


Дата: Июн 5, 2004 16:10:25

> Жить в крупных городах тоже не рекомендуется.
ясен факт!

> Сколько прибивал потоки таким способом - ниразу проблем не знал ни на какой винде
проблем там куча. при термировании потоков возврат ресурсов в систему уже не гарантируется (я уже не говорю о том, что память, выделенная потоком, равно как и все файлы открытые им, им же и должны быть закрыты, иначе так и будут болаться как говно в проруби до завшения процесса).

опрос флага - кретинизм, сжирающий немерянное кол-во таков ЦП, правильно - использовать либо средства синхронизации, либо исключения.
не совсем хорошо (но все же намного лучше предложенного), при осуществлении "опасных" операций, которые нельзя прервать входит в критическую секцию, а термирование потка осуществляеть специальной функцией, в которую ложить все указатели на объекты, которые к этому моменту поток успел понавыделять. тогда мы хоть гарантируем, что при его закрытии ничего плохого не произойдет и все ресурсы освободятся.


Дата: Июн 5, 2004 16:12:16

> Например я хочу при нажатии кнопки закрыть поток.
return из главной функции потока ;)


Дата: Июн 5, 2004 17:23:02

kaspersky, кнопка-то не в потоке :)


Дата: Июн 5, 2004 17:43:07

kaspersky
Да, вы правы. Я обычно потоки, которые пользователь может прибить, делаю максимально облегченными - просто вычисления и никакой работы с ресурсами. А все остальное у меня в разряде "особых случаев", т.к. я ими почти не пользовался.


Дата: Июн 5, 2004 18:44:47

> kaspersky, кнопка-то не в потоке :)
это мой ответ на вопрос дяди рихтера, "какой смысл связывать кнопку с одним потоком, а список с другим?"
так ведь есть смысл, оказывается ;)
лучше всего, когда поток отходит в мир иной сам. чуть хуже, когда ему об этом сигнализуют. как именно сигнализируют? ну... тут могут быть разные реализации. я обычно предпочитаю Event'ы, но это дела вкуса. еще не надо забывать, что поток идеологически правильно создавать не CreateThread, а соотв. RTL-функцией, иначе можно легко нарваться на ласты. так же идеологически правильно завершать поток return'ом, передавая RTL'у бразды завершения


Дата: Июн 5, 2004 18:48:54

> Да, вы правы. Я обычно потоки, которые пользователь
> может прибить, делаю максимально облегченными - просто
> вычисления и никакой работы с ресурсами.
к сожалению, так получается далеко не всегда.
вычисления они часто треюут непредсказуемого наперед кол-ва памяти, поэтому его приходится выделять в потоке, тоже самое и с файлами... а про интерфейс я вообще молчу. если мы сопровождаем вычисления выводом красивых рюшечек на экран (например, моделируем движение звезд в галактике, при этом каждую звезду обрабатывает свой поток, изврат, конечно, но в качестве примера сойдет), - тогда добавляются проблемы освобождения кистьев и перьев, не говоря уже о контекстах, которых в 9x вообще говоря очень даже немного. в NT с этии попроще, но все же не настолько просто, чтобы было можно расслабиться...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.106