23.01.2013, 20:36 | #1 |
Участник
|
Зависает Thread.run()
DAX2009
Может быть кто-то сталкивался с ситуацией, когда при запуске потока он зависает на несколько секунд (в моем случае 5-10), после чего запускается, и отрабатывает нормально. Например - открываю форму стандартного приложения tutorial_Thread, зависание происходит на строке с run(): X++: Thread t = new Thread(); ; t.setInputParm([searchFor]); t.run( classnum( TutorialThread ), staticmethodstr(TutorialThread,runThread)); return t; |
|
24.01.2013, 09:14 | #2 |
Участник
|
А при входе в Аксапту таких зависаний не проявляется? Под новый поток создаётся отдельная сессия типа WorkerThread, возможно, подвисание происходит при ее создании.
|
|
24.01.2013, 14:24 | #3 |
Возьми свет!!!
|
Не знаю как в 9ке но в 4ке глюки были в зависимости от того где выполняется класс и какая нить(серверная/клиентская метод runThread) пораждается классом серверным или клиентским.
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
24.01.2013, 16:20 | #4 |
Участник
|
Цитата:
Если подскажите в какую сторону можно порыть, чтобы понять почему на 2-ой базе вдруг появилось зависание - буду премного благодарен. |
|
24.01.2013, 16:21 | #5 |
Участник
|
Спасибо за комментарий, но подобные варианты уже вроде все проверил, зависимостей не обнаружил.
|
|
24.01.2013, 16:48 | #6 |
Боец
|
Для начала проверяйте методы
- infolog.startup - infolog.startupPost - application.startup - application.startupPost Вероятнее всего оттуда ноги растут. Если ничего не найдете, то я бы настроил TraceParcer - там все увидите - что, где и сколько выполняется http://blogs.msdn.com/b/axperf/archi...customers.aspx. |
|
05.05.2015, 11:18 | #7 |
Участник
|
Добрый день!
В цикле формирую 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(); } } |
|
01.06.2015, 20:15 | #8 |
Участник
|
Цитата:
Я вот сегодня словил удивительную вещь. В серверном коде запускаем thread и обнаруживаем что он валится при любом обращении к ClassFactory Это же капец полный. Т.е. если я дергаю в нем X++: new xSession().clientKind() А если, соответсвующие X++: Global::clientKind() Global::clientKind() И даже безобидная конструкция X++: (classfactory ? true : false) Это что же делается ? Системным классам санкции объявили ? |
|
02.06.2015, 00:21 | #9 |
Участник
|
X++: Global::clientKind() Global::clientKind() X++: Global::clientKind() Global::HasGui() |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|