Re: Завершение функции потока
От: Varchev ILYA Nickolaevich  
Дата: 20.07.01 14:00
Оценка:
Здравствуйте The Lex, вы писали:

TL>Есть ли суть одно: завершение функции потока как return x или как ExitThread(x)?


Нет, это немного разные вещи.
Рассмотрим пример:

class CMyClass{
char* m_pText;
public:
CMyClass(){ m_pText = new char[ ... ]; strcpy( m_pText,.... );
~CMyClass() { delete m_pText; }
};

...MyThreadFunc( ... )
{
CMyClass c;
//
...
//
ExitThread( result );
}

Данная функция никогда не вернётся из ExitThread, откуда следует, что
никогда НЕ БУДЕТ ВЫЗВАН ДЕСТРУКТОР объектов. Таким образом произойдёт
утечка памяти ( переменная-член m_pText ). Кроме того, открытые
HANDLE-ы (Например файлы), по моему, не будут закрыты.
В общем, следует избегать использования ExitThread, а тем более
TerminateThread ( в последнем случае + ко всему не будет освобождён ещё и стек потока ).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.