|
|
| Посл.отвђт | Сообщен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 |