Переключение на Главную Страницу Страницы: 1 [2] 3 4 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) ВК для асинхронной обработки событий COM-объектов. (число прочтений - 63027 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #15 - 12. Июля 2006 :: 10:50
Печать  
Погоди, погоди... Надо подумать тщательнее... Я уже столкнулся в ULE с передачей через "|" и славливал пару раз косяки.

Может и строка для СЗ... А не проще тогда сразу компонентой создавать СЗ и передавать его в качестве списка параметров?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #16 - 12. Июля 2006 :: 11:12
Печать  
Arta писал(а) 12. Июля 2006 :: 10:50:
А не проще тогда сразу компонентой создавать СЗ и передавать его в качестве списка параметров?

Компонента, получив событие, вызывает IAsyncEvent->ExternalEvent и больше ничего не делает.
Процедуру ОбработкаВнешнегоСобытия вызывает движок 1С, когда решит, что он может заняться всякой фигней типа обработки внешних событий. Если вызывать процедуру из ВК, то обработчик надо будет выполнять в отдельном потоке. Печаль (или смириться с возможной потерей событий)
Так что параметры надо ухитриться утрамбовать в одну строку (3-й параметр в вызове ExternalEvent).
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #17 - 12. Июля 2006 :: 11:23
Печать  
У списка значения вроде есть ВСтрокуСРазделителями/ИзСтрокиСРазделителями, а радужные хейдеры вроде подключены. Хотя автору виднее.
  
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #18 - 12. Июля 2006 :: 11:25
Печать  
Компонента написана по "Технологии создания внешних компонент" от 1С. Без использования хедеров от "Радуги".
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: ВК для асинхронной обработки событий COM-объек
Ответ #19 - 12. Июля 2006 :: 13:12
Печать  
steban
Может, вместо сериализации данные события сохранять в самом обработчике?
Например так:
Код
Выбрать все
// Данные - это ключ хэш-таблицы.
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
	Если (Источник="Аутглюк") и (Событие="ItemSend") Тогда
		Письмо=ОбработчикСобытий.ПолучитьДанные(Данные);
		Сообщить(Письмо.Subject);
	КонецЕсли;
КонецПроцедуры	// ОбработкаВнешнегоСобытия  

  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #20 - 12. Июля 2006 :: 13:38
Печать  
Палыч писал(а) 12. Июля 2006 :: 13:12:
Может, вместо сериализации данные события сохранять в самом обработчике?

Хороший вариант, только тогда на совести разработчика будет удаление данных события из хранилища обработчика.
(или удалять их при первом получении..).
Плюс еще хранение данных события в обработчике продлит жизнь некоторым параметрам....
Будем думать....
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #21 - 12. Июля 2006 :: 13:48
Печать  
Палыч писал(а) 12. Июля 2006 :: 13:12:
Может, вместо сериализации данные события сохранять в самом обработчике?

Очень удобный вариант! Я всеми руками за! Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #22 - 12. Июля 2006 :: 14:13
Печать  
ИМХО нужно добавлять внутрь 1С++
Фича красиво переплетается с АктивИкс.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #23 - 12. Июля 2006 :: 14:51
Печать  
artbear писал(а) 12. Июля 2006 :: 14:13:
ИМХО нужно добавлять внутрь 1С++

IAsyncEvent удобен тем, что содержит очередь событий. Нудобен тем, что всего один текстовый параметр и нет возможности вернуть источнику параметр, переданный по ссылке.
При написании сего в составе 1С++ (или как ВК по технологии Rainbow) возникает соблазн не использовать IAsyncEvent, а вызывать обработчик напрямую (с нужным количеством параметров нужных типов и с возможностью вернуть источнику параметры, переданные по ссылке).
Вот только я не представляю как поведет себя 1С при попытке выполнить код через CBLModule::CallAsFunc во время формирования какого-нибудь отчета. Событие ведь может возникнуть в любой момент.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #24 - 12. Июля 2006 :: 15:03
Печать  
Попробовал парочку тестов. Сложилось впечатление, что код 1С, вызванный из ВК через CBLModule::CallAsFunc не начнет выполняться, пока не закончится выполнение другого кода.
Так ли это?
Точный ответ, наверное знает АЛьФ или orefkov.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #25 - 12. Июля 2006 :: 15:08
Печать  
Дык может другим потоком? Вроде реализовывали в 1cpp?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #26 - 12. Июля 2006 :: 15:14
Печать  
Arta писал(а) 12. Июля 2006 :: 15:08:
Дык может другим потоком?

нафих-нафихArta писал(а) 12. Июля 2006 :: 15:08:
Вроде реализовывали в 1cpp?
и где сейчас этот функционал? отправлен в топку.....
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ВК для асинхронной обработки событий COM-объек
Ответ #27 - 12. Июля 2006 :: 15:25
Печать  
Другим потоком можно собирать данные и запихивать в очередь, но без обращения к 1С.
Но отправлять в 1С, видимо, нужно основным потоком...
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #28 - 12. Июля 2006 :: 20:36
Печать  
Я пришел к выводу, что нужны оба варианта:
  • реализация в виде ВК (ТСВК от 1С) и передача событий в 1С через IAsyncEvent:
    Источник событий уведомил 1С о произошедшем событии и пошел выполняться дальше.
    минусы: нет возможности управлять дальнейшим выполнением источника (через параметры, передаваемые по ссылке) и всякие заморочки с сериализацией/десериализацией.
  • В составе 1С++:
    1С что-то долгое делает, вдруг возникает событие. Обработчик события ждет, пока 1С не закончит свои дела.
    Вместе с ним тихонько курит в сторонке источник событий, дожидаясь завершения работы обработчика.
    НО: можно реализовать передачу нужного количества параметров в обработчик на языке 1С(в т.ч. и параметры по ссылке) без сериализации/десериализации.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: ВК для асинхронной обработки событий COM-объек
Ответ #29 - 26. Июля 2006 :: 10:08
Печать  
"Ошибка при выполнении метода объекта компоненты"
По каким причинам может выдавать такое ?
  

Константин
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 5
ОтправитьПечать