Хендл потока
От: RMikola  
Дата: 15.08.05 07:20
Оценка:
Ламерский вопрос, извиняйте:
Я использую в проге несколько потоков, которые создаю как
Hang=CreateThread(NULL,NULL,HangFunc,NULL,0,&DWthr.dwHang);
где нужно вызывать CloseHandle(Hang)? Я перепробовал все — в том числе и отсутствие closehandle() — все равно работает, только утечка памяти и все,
а где будет правильнее вызвать? быть может при закрытии программы? (поток может создаваться неоднократно, тобишь повторно!)
Re: Хендл потока
От: Аноним  
Дата: 15.08.05 07:22
Оценка:
Здравствуйте, RMikola, Вы писали:

RM>Ламерский вопрос, извиняйте:

RM> Я использую в проге несколько потоков, которые создаю как
RM> Hang=CreateThread(NULL,NULL,HangFunc,NULL,0,&DWthr.dwHang);
RM> где нужно вызывать CloseHandle(Hang)? Я перепробовал все — в том числе и отсутствие closehandle() — все равно работает, только утечка памяти и все,
RM>а где будет правильнее вызвать? быть может при закрытии программы? (поток может создаваться неоднократно, тобишь повторно!)

Почитай МСДН.. Эта функция с багом. Лучше использовать beginthread
Re[2]: Хендл потока
От: sjman Россия  
Дата: 15.08.05 07:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почитай МСДН.. Эта функция с багом. Лучше использовать beginthread


А еще лучше beginthreadex
Re[2]: Хендл потока
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.08.05 07:26
Оценка: +1
RM>>Ламерский вопрос, извиняйте:
RM>> Я использую в проге несколько потоков, которые создаю как
RM>> Hang=CreateThread(NULL,NULL,HangFunc,NULL,0,&DWthr.dwHang);
RM>> где нужно вызывать CloseHandle(Hang)? Я перепробовал все — в том числе и отсутствие closehandle() — все равно работает, только утечка памяти и все,
RM>>а где будет правильнее вызвать? быть может при закрытии программы? (поток может создаваться неоднократно, тобишь повторно!)

А>Почитай МСДН.. Эта функция с багом. Лучше использовать beginthread


Эта функция без бага. Баг в CRT.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Хендл потока
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 15.08.05 08:00
Оценка: 1 (1)
Здравствуйте, RMikola, Вы писали:

RM>Ламерский вопрос, извиняйте:

RM> Я использую в проге несколько потоков, которые создаю как
RM> Hang=CreateThread(NULL,NULL,HangFunc,NULL,0,&DWthr.dwHang);
RM> где нужно вызывать CloseHandle(Hang)?

там где Hang тебе уже не нужен, если не нужен в принципе, то сразу после CreateThread или _beginthreadex
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Хендл потока
От: RMikola  
Дата: 15.08.05 08:39
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, RMikola, Вы писали:


RM>>Ламерский вопрос, извиняйте:

RM>> Я использую в проге несколько потоков, которые создаю как
RM>> Hang=CreateThread(NULL,NULL,HangFunc,NULL,0,&DWthr.dwHang);
RM>> где нужно вызывать CloseHandle(Hang)?

OE>там где Hang тебе уже не нужен, если не нужен в принципе, то сразу после CreateThread или _beginthreadex


Спасибо, я так и делал — просто хотел удостоверится, что это правильно!
Re[3]: Хендл потока
От: SergH Россия  
Дата: 15.08.05 13:51
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Эта функция без бага. Баг в CRT.


Не слабо сделать лучше, сохранив интерфейс?
Делай что должно, и будь что будет
Re: Хендл потока
От: Аноним  
Дата: 15.08.05 14:00
Оценка:
в большинстве примеров он закрывается сразу после создания,
если мне память не изменяет то даже у Рихтера было что то вроде
HANDLE hSomeThread = ::CreateThread(......);
::CloseHandle(hSomeThread);

Да и собственно он тебе может понадибицца только по одной причине
если прийдецца гдето ждать окончания потока,
это ::WaitForsingleObject(hSomeThread, INFINITE);
или проверить его остояние.
Re[4]: Хендл потока
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.08.05 14:03
Оценка: 53 (2)
AS>>Эта функция без бага. Баг в CRT.

SH> Не слабо сделать лучше, сохранив интерфейс?


Не слабо
http://www.codeproject.com/threads/tls.asp

ключевая фраза — tls callbacks
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Хендл потока
От: SergH Россия  
Дата: 15.08.05 14:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в большинстве примеров он закрывается сразу после создания,

А>если мне память не изменяет то даже у Рихтера было что то вроде
А>HANDLE hSomeThread = ::CreateThread(......);
А>::CloseHandle(hSomeThread);

А>Да и собственно он тебе может понадибицца только по одной причине

А>если прийдецца гдето ждать окончания потока

будьте аккуратнее. Если вас западозрят в падоночистве, могут забанить.

А>это ::WaitForsingleObject(hSomeThread, INFINITE);

А>или проверить его остояние.

Ещё убить, затормозить, продолжить, получить токен, время работы, приоритет.
Делай что должно, и будь что будет
Re[3]: Хендл потока
От: adontz Грузия http://adontz.wordpress.com/
Дата: 15.08.05 15:40
Оценка:
Здравствуйте, SergH, Вы писали:

А>>если прийдецца гдето ждать окончания потока

SH>будьте аккуратнее. Если вас западозрят в падоночистве, могут забанить.

Чё серьзно? За ЦЦ уже банят? Вах, как интресно
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Хендл потока
От: SergH Россия  
Дата: 15.08.05 15:44
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, SergH, Вы писали:


А>>>если прийдецца гдето ждать окончания потока

SH>>будьте аккуратнее. Если вас западозрят в падоночистве, могут забанить.

A>Чё серьзно? За ЦЦ уже банят? Вах, как интресно


Читай внимательнее.
Делай что должно, и будь что будет
Re[4]: Хендл потока
От: adontz Грузия http://adontz.wordpress.com/
Дата: 15.08.05 15:46
Оценка:
Здравствуйте, SergH, Вы писали:

AS>>Эта функция без бага. Баг в CRT.

SH> Не слабо сделать лучше, сохранив интерфейс?

Не слабо Всё что beginthread|endthread делают, это выделяют TLS, который используется для хранения промежуточных данных, при обработке исключений. Всё остальное, что они делают можно перенести в другие места.
Выделять же что-то для потока и освобождать (с любыми целями, не только для исключений) можно и в DLL_THREAD_ATTACH/DLL_THREAD_DETACH.
Думаю требование что бы программа была одним EXE-шником без DLL настолько редко встречается, что данную технику вполне моджно применять. Что я и сделал в своё реализации обработки исключений
Честно говоря, учитывая что это MS-extension и что MSVCRT.DLL поставляется с Windows я вообще не понимаю зачем их сделали.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Хендл потока
От: adontz Грузия http://adontz.wordpress.com/
Дата: 15.08.05 15:49
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>ключевая фраза — tls callbacks


Прикольно. Но ИМХО использование DLL понятнее.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Хендл потока
От: Andrew S Россия http://alchemy-lab.com
Дата: 15.08.05 15:55
Оценка:
AS>>ключевая фраза — tls callbacks

A>Прикольно. Но ИМХО использование DLL понятнее.


А использование tls callbacks — правильнее. Этот механизм для подобных целей и предназначен. Опять же — статически линкованная CRT (а примеров, когда это _приходится_ делать в моей практике было несколько) — и все, сливай воду на бреющем...
В общем, когда есть возможность сделать что то правильно, лучше это сделать.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[5]: Хендл потока
От: SergH Россия  
Дата: 15.08.05 15:59
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, SergH, Вы писали:


AS>>>Эта функция без бага. Баг в CRT.

SH>> Не слабо сделать лучше, сохранив интерфейс?

A>Не слабо Всё что beginthread|endthread делают, это выделяют TLS, который используется для хранения промежуточных данных, при обработке исключений. Всё остальное, что они делают можно перенести в другие места.

A>Выделять же что-то для потока и освобождать (с любыми целями, не только для исключений) можно и в DLL_THREAD_ATTACH/DLL_THREAD_DETACH.

Я вкурсе. Я даже Рихтера читал.

A>Думаю требование что бы программа была одним EXE-шником без DLL настолько редко встречается, что данную технику вполне моджно применять. Что я и сделал в своё реализации обработки исключений


Т.е. пользователю надо таскать с собой dll? Это изменение интерфейса. Раньше не надо было и работало, а теперь приходится совершать дополнительные действия.

A>Честно говоря, учитывая что это MS-extension и что MSVCRT.DLL поставляется с Windows я вообще не понимаю зачем их сделали.


Во-первых, последние версии не поставляются. Насколько я помню, в dll из VS.2003 нет нигде, кроме 2003 Server, да и он под подозрением. Во=-вторых, есть отладочные версии, которые не поставляются вообще.
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.