Имя: Пароль:
1C
1С v8
Com коннектор в многопоточном режиме
,
0 1yes
 
10.06.15
16:57
Внешняя программа использует одно подключение COM коннектора 1C  в многопоточном режиме.   В каждом потоке вызывается функция модуля внешнего соединения. Если время выполнения этой функции мало, то выполнение в каждом потоке завершается корректно. Если внешняя функция работает продолжительное время ( примерно 5 сек ) , то уже на третьем потоке возникает ошибка.
Unhandled exception at 0x31ABE49E (backend.dll) in Sp1CGate.exe: 0xC0000005: Access violation reading location 0x0000000A. (Sp1CGate.exe - программа, которая создает несколько потоков)
1 DmitrO
 
10.06.15
17:08
мне почему-то кажется что объект внешнего соединения не потокобезопасный, поэтому использовать его так попросту нельзя.
2 DmitrO
 
10.06.15
17:21
Обычно, если кто-то создает что-то потокобезопасное, то в документации так и пишет (ибо это как правило требует применения в коде спец. средств, которые кстати будут несколько замедлять работу если использование будет только из одного потока), а если ничего не написано то обычно подразумевается работа только из одного потока.
Я не помню что про объект внешнего соединения где-то было указание что он потокобезопасный.
3 1yes
 
10.06.15
17:25
(2) Есть соответствующий ключ в реестре, который говорит, что данный компонент многопоточный. По-видимому это баг.
4 DmitrO
 
10.06.15
17:28
(3)да, в реестре записано both, но это ведь про объект который ты создаешь по прогид "V83.ComConnector", а вовсе не про объект который тебе вернул метод Connect.
5 DmitrO
 
10.06.15
17:31
сам менеждер соединений (V83.ComConnector) может и потокобезопасный..
че там, три метода, да 7 свойств, для организации пулов его имеет смысл сделать таким..
а вот сам объект внешнего соединения - вряд ли
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.