![]() |
#8 |
Участник
|
Добрый день!
В цикле формирую Thread'ы каждый из них кладу в Map, для дальнейшего слежения за статусами ( это необходимо для запуска дальнейшего кода ). В цикле перебираю статусы. 1) статус Running появляется не сразу (спустя минут 10), почему? Если убрать код смотрящий на статусы - результат появляется раньше, но не вижу, когда началось выполнение и не вижу критерия для запуска дальнейшего кода. 2) даже после отрабатывания процедуры (через второе клиентское приложение смотрю) в отладчике статус Running, но не Terminated (создал енум https://msdn.microsoft.com/en-us/lib...94(VS.85).aspx ), почему? (Trace Parser не запускал) Цикл: X++: for( ... )
{
ThreadsMap.insert( CurStep, farm_BudgetPlanFactHybrid::createThread( ... ) );
CurStep++;
} X++: Static server Thread createThread( str _query ) { ExecutePermission ExecutePermission = new ExecutePermission(); Thread thread; ExecutePermission.assert(); thread = new Thread(); thread.setInputParm([ _query ]); thread.removeOnComplete(true); thread.run(classnum(farm_BudgetPlanFactHybrid), staticmethodstr(farm_BudgetPlanFactHybrid, executeUpdateWithThread)); CodeAccessPermission::RevertAssert(); return thread; } X++: MapEnumerator = ThreadsMap.getEnumerator(); While( MapEnumerator.moveNext() && ThreadsMap.elements() ) { ParmThread = MapEnumerator.currentValue(); test = ParmThread.status(); if( ParmThread.status() == farm_ThreadStatus::Terminated ) { ThreadsMap.remove( MapEnumerator.currentKey() ); } if( MapEnumerator.currentKey() == ThreadsMap.elements() - 1 ) { MapEnumerator = ThreadsMap.getEnumerator(); } } |
|
|
|