Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизУмирающий поток. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c