AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.01.2013, 20:36   #1  
GLUK is offline
GLUK
Участник
 
24 / 30 (2) +++
Регистрация: 30.12.2009
Зависает 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  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
А при входе в Аксапту таких зависаний не проявляется? Под новый поток создаётся отдельная сессия типа WorkerThread, возможно, подвисание происходит при ее создании.
Старый 24.01.2013, 14:24   #3  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Цитата:
Сообщение от GLUK Посмотреть сообщение
DAX2009

Может быть кто-то сталкивался с ситуацией, когда при запуске потока он зависает на несколько секунд (в моем случае 5-10), после чего запускается, и отрабатывает нормально.
В чем может быть причина?
Не знаю как в 9ке но в 4ке глюки были в зависимости от того где выполняется класс и какая нить(серверная/клиентская метод runThread) пораждается классом серверным или клиентским.
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 24.01.2013, 16:20   #4  
GLUK is offline
GLUK
Участник
 
24 / 30 (2) +++
Регистрация: 30.12.2009
Цитата:
Сообщение от gl00mie Посмотреть сообщение
А при входе в Аксапту таких зависаний не проявляется? Под новый поток создаётся отдельная сессия типа WorkerThread, возможно, подвисание происходит при ее создании.
Похоже вы правы. Действительно при входе в аксапту зависание аналогичное. У меня рядом 2 тестовые базы, на одной все работает быстро, а на второй зависания как раз имеются.

Если подскажите в какую сторону можно порыть, чтобы понять почему на 2-ой базе вдруг появилось зависание - буду премного благодарен.
Старый 24.01.2013, 16:21   #5  
GLUK is offline
GLUK
Участник
 
24 / 30 (2) +++
Регистрация: 30.12.2009
Цитата:
Сообщение от Murlin Посмотреть сообщение
Не знаю как в 9ке но в 4ке глюки были в зависимости от того где выполняется класс и какая нить(серверная/клиентская метод runThread) пораждается классом серверным или клиентским.
Спасибо за комментарий, но подобные варианты уже вроде все проверил, зависимостей не обнаружил.
Старый 24.01.2013, 16:48   #6  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Для начала проверяйте методы
- infolog.startup
- infolog.startupPost
- application.startup
- application.startupPost

Вероятнее всего оттуда ноги растут. Если ничего не найдете, то я бы настроил TraceParcer - там все увидите - что, где и сколько выполняется
http://blogs.msdn.com/b/axperf/archi...customers.aspx.
Старый 05.05.2015, 11:18   #7  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 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();
    }
}
Старый 01.06.2015, 20:15   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Murlin Посмотреть сообщение
Не знаю как в 9ке но в 4ке глюки были в зависимости от того где выполняется класс и какая нить(серверная/клиентская метод runThread) пораждается классом серверным или клиентским.
А какого рода глюки ?
Я вот сегодня словил удивительную вещь.
В серверном коде запускаем thread и обнаруживаем что он валится при любом обращении к ClassFactory

Это же капец полный.
Т.е. если я дергаю в нем
X++:
new xSession().clientKind()
то все ок.
А если, соответсвующие
X++:
Global::clientKind()
Global::clientKind()
то thread прерывает работу.
И даже безобидная конструкция
X++:
(classfactory ? true : false)
тоже убивает поток.

Это что же делается ? Системным классам санкции объявили ?
Старый 02.06.2015, 00:21   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,953 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
X++:
Global::clientKind()
Global::clientKind()
надо было написать
X++:
Global::clientKind()
Global::HasGui()
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Классы от RunBaseReport и класс Thread Pustik DAX: Программирование 28 10.11.2015 13:07
You experience issues when you run the "Physical inventory by inventory dimension" report and the "Physical inventory by item group" report in Microsoft Dynamics AX 2009 Vadik DAX: База знаний и проекты 0 27.08.2010 23:00
Pawan's Ax blog: How to run AIF job Blog bot DAX Blogs 0 19.04.2010 11:05
Kashperuk Ivan: Run AX as a different user from Windows Explorer Blog bot DAX Blogs 0 15.01.2010 02:09
gatesasbait: Logging independently of transaction scope by using a separate thread in Dynamics AX Blog bot DAX Blogs 0 27.05.2009 23:16

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:43.