Показать сообщение отдельно
Старый 05.05.2015, 11:18   #7  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
268 / 814 (28) +++++++
Регистрация: 23.10.2012
Добрый день!

В цикле формирую 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();
    }
}