Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Умирающий поток. [D7, Win2k]


debuger ©   (2005-07-15 20:47:00) 

Доброго времени суток
Есть следжующая ситуация: имеется некий общий ресурс, и несколько потоков, которые к нему доступаются(использую критические секции). Но некий не поддающийся прослеживанию(т.е. спонтанно для меня лично) момент времени один из потоков пересает обращаться к ресурсу вообще, т.е. создается впечатление что он термнэйтнулся за моей спиной, причем без каких либо исключений. Может ли такое быть и как это лечить.


debuger   (2005-07-22 16:11:00) [1]

Спасибо всем.


debuger   (2005-07-22 16:11:00) [2]

Спасибо всем.


Alexander Panov   (2005-07-18 10:30:00) [3]

debuger ©   (17.07.05 11:43) [5]
Помжет ли мне то, что содержимое цикла я оберну в try..except?


Поможет несомненно - не будет произвольного выхода из функции потока.
Кроме того, вначале цикла тоже желательно проверять флаг Terminated.


Digitman   (2005-07-18 10:22:00) [4]


> Помжет ли мне то, что содержимое цикла я оберну в try..except?


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

есть еще предположение, что где-то в телах вызываемых в теле Execute() п/программ ты "гадишь" поле TThread.FTerminated, что вполне может привести к "досрочному" выходу из цикла


debuger   (2005-07-17 11:43:00) [5]

основное тело потока примерно следующее:

repeat
 tickCount := GetTickCount;

 GetDeviceInf; // читаем с девайса инфу, это и есть общий ресурс, внутри самой процедуры и используются критические секции 
 Synchronize(UpDate); //выод результатов

 tickCount := GetTickCount - tickCount;

 if tickCount < idleTime then
   Delay(idleTime - tickCount); // Delay - по сути некое подобие того, что еть в RxLib.
until terminated;


Помжет ли мне то, что содержимое цикла я оберну в try..except?


debuger   (2005-07-16 16:33:00) [6]

2: вроде как завершился, я через WaitFor его дожидаюсь при завершении, сразу же срабатывает, если бы он залип был, то вряд ли бы я его так быстро дождался.
3: поток создавался как TThread.Create

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


Alex Konshin   (2005-07-15 22:34:00) [7]

Исключение вполне могло быть, только ты его не отловил в потоке.

Как создавался поток?


begin...end   (2005-07-15 20:56:00) [8]

> debuger ©   (15.07.05 20:47)

> один из потоков пересает обращаться к ресурсу вообще,
> т.е. создается впечатление что он термнэйтнулся за
> моей спиной

Действительно ли он завершился? Что возвращает в этой ситуации WaitForSingleObject (с параметром dwMilliseconds = 0)?


Mx   (2005-07-15 20:53:00) [9]

Надо бы инфы побольше


Наверх

Титульная страница Поиск, карта сайта Написать письмо