C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Вопрос по потокам, Как проверить существует ли поток
Gedeon
Отправлено: 20.08.2003, 17:43


Ветеран

Группа: Модератор
Сообщений: 1742



У меня в проге создается поток по таймеру каждые 2 минуты и выполняется, но нужно чтобы этот же поток был вновь создан и выполнен при нажатии на кнопку на форме, а тот который выполнялся был остановлен перед созданием нового, но проблема в том, что если пытаться остановить несуществующий поток вывалится exeption, так вот вопрос в том как проверить существует ли ранее созданный поток или он уже выполнился и уничтожился. Поток — это в смысле я использую TThread.
Георгий
Отправлено: 20.08.2003, 23:20


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



А ты какой-нибудь семафор, мутекс или самодельный флажёк поставь, который будет устанавливаться в начале работы потока потоком, и при завершении работы того же сбрасывается тем же.
Gedeon
Отправлено: 21.08.2003, 10:47


Ветеран

Группа: Модератор
Сообщений: 1742



Да похоже так и прийдется сделать, просто я думал может есть какие-нить стандартные способы или свойства, спасибо за беспокойство.
Asher
Отправлено: 21.08.2003, 13:18


Мастер участка

Группа: Модератор
Сообщений: 550



Если потоки удаляешь сам, то не забывай удалять указатели на них, если же потоки по завершению удаляются сами, то при создании добавь в конструктор потокам указатель на себя, который они будут сбрасывать в NULL при завершении работы. Это всего три строки кода — описание указателя, запоминание его в конструкторе и очистка по завершении.

Тогда в основной программе все просто if(указатель на поток){код выполняется при существующем потоке} else {код выполняется при отсутствии потока}
Gedeon
Отправлено: 21.08.2003, 14:23


Ветеран

Группа: Модератор
Сообщений: 1742



Asher, большое спасибо, что-то такое чувствовал, но про конструктор и деструктор не додумался, теперь получится так, как хотел
Asher
Отправлено: 26.08.2003, 09:17


Мастер участка

Группа: Модератор
Сообщений: 550



Я тут внимательно посмотрел на ТТhread, и увидел, что деструктор к уничтожениею потока так прямо не соотносится. Даже если установлено FreeOnTerminate, то по завершению работы потока указатель на него сохраняется и деструктор не вызывается.
в прямую за работой нужно следить по свойству Terminated потока.

Gedeon
Отправлено: 26.08.2003, 10:08


Ветеран

Группа: Модератор
Сообщений: 1742



Да я это сам посмотрел уже после того как читал форум, ну не важно, ведь есть Event OnTerminate по которому все и можно отследить

Вернуться в Вопросы программирования в C++Builder