Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Умирающий поток.   Найти похожие ветки 

 
debuger ©   (2005-07-15 20:47) [0]

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


 
Mx ©   (2005-07-15 20:53) [1]

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


 
begin...end ©   (2005-07-15 20:56) [2]

> debuger ©   (15.07.05 20:47)

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

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


 
Alex Konshin ©   (2005-07-15 22:34) [3]

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

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


 
debuger ©   (2005-07-16 16:33) [4]

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

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


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

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

repeat
 tickCount := GetTickCount;

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

 tickCount := GetTickCount - tickCount;

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


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


 
Digitman ©   (2005-07-18 10:22) [6]


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


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

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


 
Alexander Panov ©   (2005-07-18 10:30) [7]

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


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


 
debuger ©   (2005-07-22 16:11) [8]

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


 
debuger ©   (2005-07-22 16:11) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
4-1118573861
Juk
2005-06-12 14:57
2005.08.14
Обработка WM_NCACTIVATE.


14-1121840609
Ega23
2005-07-20 10:23
2005.08.14
С днем рождения! 20 июля


3-1120425439
eLimar
2005-07-04 01:17
2005.08.14
Индексы Foxpro (cdx)


3-1120744873
fens
2005-07-07 18:01
2005.08.14
скроллинг текста


1-1122518346
npr2
2005-07-28 06:39
2005.08.14
печать отчкта в crystal reports