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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.12.2004, 19:02   #21  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
тогда - не знаю.
раньше ошибки возникали в связи с сообщениями пользователю.
сейчас - не знаю.
Старый 02.12.2004, 09:38   #22  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Всем доброе утро!
Начну сначала. Нужно чтобы при работе клиента с определенной переодичностью выполнялось создание закупки, строк закупки, обработка закупки. Для этого создан ряд классов, которые создают закупки, строки закупки, и обработывают их до накладной ( всего их 5 ). Все они наследники RunBaseBatch для возможного запуска этой функциональности в пакетном режиме.
Но хочется сделать автоматическую обработку. Для этого в классе Application в ClassDeclaration завожу переменные класса [COLOR=red] Thread[/COLOR=red], в [COLOR=blue]startupPost[/COLOR=blue] запускаю таймеры
PHP код:
this.setTimeOutIdentifierStrимя_обработчика ), 3000 ); 
.
В обработчике:

PHP код:
protected void имя_обработчика() {
    
// если поток еще не создан или уже закончил работу, то создать новый поток
    
if ( !handlingMovement_Header || handlingMovement_Header.status() == ) {
        
// запуск потока
        
handlingMovement_Header null;
        
handlingMovement_Header HandlingMovement_Header::runThread();
    }
    
// запуск метода снова
    
this.setTimeOutIdentifierStrимя_обработчика ), 10000 );
}

// запуск потока
client static Thread runThread() {
Thread   thread;             // объект класса Thread
;
    
// создание объекта класса Thread
    
thread = new Thread();
    
// запуск потока
    
thread.runClassNumHandlingMovement_Header ), StaticMethodStrHandlingMovement_HeaderentryPointThread ) );
return 
thread;
}

// точка входа
private client static void entryPointThreadThread pThread ) {
HandlingMovement_Header   handlingMovement_Header;                // объект класса HandlingMovement_Header
;
    
// создание объекта класса HandlingMovement_Header
    
handlingMovement_Header = new HandlingMovement_Header();
    
// обработка
    
if ( handlingMovement_Header handlingMovement_Header.run();
}

// обработка
void run() {
;
    
// цикл по одобренным строкам
    
while select movement_Header_Select
                 where movement_Header_Select
.Approve == true {
        
// перейти в компанию
        
changeCompanymovement_Header_Select.CompanyTo ) {
            try {
                
// обработка
                
this.handling();
            }
            catch ( 
Exception::Deadlock ) {
            }
            catch ( 
Exception::Error ) {
            }
        }
    }

Некоторое время все работает нормально 10 - 15 мин, а потом появляется сообщение
Can't create tooltip ( type 2 ), а еще через некоторое время падает сама Axapta. Что я сделал не правильно?
Старый 02.12.2004, 09:48   #23  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Вы неправильно к существу вопроса подошли.
Автоматический запуск в теневом потоке каких то процедур - это конечно же круто, но то что вы описали решается стандартным функционалом - сервером пакетной обработки. Тем более что у вас эти обработки уже заготовлены как наследники от RunBaseBatch.
Старый 02.12.2004, 09:52   #24  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Эта функциональность должна выполнятся с периодичностью 30 мин и хотелось бы вообще забыть о ней. Пакет это хорошо, но его могут забыть запустить или пойдет что - то не так...
Старый 02.12.2004, 09:58   #25  
lagr221374
Гость
 
n/a
А, что в это время происходит с оперативной памятью, она "не съедается"?
Старый 02.12.2004, 10:00   #26  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Если вы подскажете как ее посмотреть, то посмотрю, а так в диспетчере задач вроде все нормально. Кстати, Axapta падает потом именно по ошибке памяти.
Старый 02.12.2004, 10:02   #27  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Изначально опубликовано sergy
Эта функциональность должна выполнятся с периодичностью 30 мин и хотелось бы вообще забыть о ней. Пакет это хорошо, но его могут забыть запустить или пойдет что - то не так...
30 минут - это как раз задачка для сервера пакетной обработки. У него "максимальная разрешающая способность" - 1 минута.
Что касается забывчивости - то это уже организационный вопрос.
Как вариант - ключевому пользователю встроить небольшую проверку в какую нибудь из часто им выполняемых процедур, которая начиналет "ругаться", если последний раз задание выполнялось больше получаса назад. Хотя тоже изврат
Старый 02.12.2004, 10:05   #28  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Не спорю, пакет это хорошо, но это резерв, хотелось бы организовать обработку через поток
Старый 02.12.2004, 11:11   #29  
StasD is offline
StasD
Участник
 
24 / 15 (1) ++
Регистрация: 10.09.2003
Адрес: Хабаровск
Цитата на всякий случай из SP3 Int, Fixlist Technology 1

"Threads in Axapta: recommendations.

The issue raised by a customer is whether you can use worker threads or not: It is possible to use threads in Axapta, but it is NOT recommended that you do so. They are not officially supported and are thus used at your own risk. Worker threads are used for Benchmarking purposes only and are only tested on the AOS. "
Старый 02.12.2004, 11:25   #30  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Спасибо StasD очено ценная информация, это в духе MBS
Старый 02.12.2004, 12:34   #31  
lagr221374
Гость
 
n/a
А может тебе не "гасить" потоки и создавать затем их заново (как я представляю, именно на этапе "гашения" происходит какой-то косяк)?
Просто "засыпать" (sleep) поток (в поточной функции) на какое-то время и дальше работать.
Что-то типа:
while (true)
{
работаю....
sleep(XXX);
что-нибудь еще...
}
Старый 02.12.2004, 12:38   #32  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
идет жуткий тормоз из-за sleep()
Старый 02.12.2004, 12:55   #33  
lagr221374
Гость
 
n/a
Попробуй сделать такой фокус

for (i = 0 ; i< delayTime; i++)
{
sleep(1);
}
В таком виде у меня вроде бы не тормозит.
Старый 02.12.2004, 13:08   #34  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Сергей!

Видно, что Вы на клиенте
Если хочется попрограммировать потоки - то да, можно извращаться. Если делать, как ПРАВИЛЬНО, то тогда - пакетный сервер. Рано или поздно он все равно Вам пригодиться... Осталось только решить проблему с автозапуском / автовходом, но здесь уже описывались решения данной проблемы. Ну, и лицензию будет жрать...

С Уважением,
Георгий
Старый 02.12.2004, 13:30   #35  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано sergy
Эта функциональность должна выполнятся с периодичностью 30 мин и хотелось бы вообще забыть о ней. Пакет это хорошо, но его могут забыть запустить или пойдет что - то не так...
?!
Сколько времени вы будете программировать свой функционал?
Сколько вам за это заплатят?
Это и есть цена "забывчивости".

Согласен с предыдущими участниками - вы занимаетесь несуществующей проблемой.
За решение которой будут заплачены вполне реальные деньги.

По автозапуск в режиме сервера здесь
http://axapta.mazzy.ru/hints/startupcmd/#Batch
Старый 02.12.2004, 14:08   #36  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Этим и хороша работа на клиенте: Проблемы - несуществующие, а деньги - реальные!

С Уважением,
Георгий.
Старый 02.12.2004, 15:43   #37  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Может быть Вы и правы, что проблема не существенная, но навый класс Thread появился, значит он должен работать, а он не работает нормально.
Старый 02.12.2004, 19:26   #38  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Мысль интересная

Посмотрите tutorial_timer.
Старый 03.12.2004, 09:15   #39  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Всем доброе утро!
Ломаю дальше. Решил сделать запуск потока один раз по примеру класса SysEventHandler ( работает на сервере ), т.е. в основном методе потока организуется бесконечный цикл внутри которого стоит задержка
PHP код:
while ( ) {
    
// выполнение чего нибудь
    
WinApi::sleep1000 );

То получается, что чем больше задержка, тем больше зависание Axapta при переключении между процессами ( Far, OutLook и т.д. ) и обратно, а также при попадании на эталонные тесты.
А если организовать семафор и подождать в потоке его открытия
PHP код:
while ( !WinApi::waitForSingleObjecthHandle ) ) {
    
// выполнение чего нибудь

то при переключении между потоками Axapta виснит намертво!!! С трудом закрывается через диспетчер задач. Обычная работа до переключения (открытие форм) идет отлично.

Вот так работают потоки на клиенте от MBS!!! Пользуйся народ на здоровье!
Старый 03.12.2004, 09:43   #40  
lagr221374
Гость
 
n/a
Попробуй вставить вместо sleep, то что я описал выше. Такое выражение (у меня во всяком случае) не тормозит в отличие от вроде бы ~ sleep(delayTime)
Теги
axapta, thread, потоки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов форм методa из Thread класса vitaly85 DAX: Программирование 4 24.01.2009 03:48
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
передача курсора в два класса kitty DAX: Программирование 3 09.08.2006 13:21
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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