|
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 свойств, для организации пулов его имеет смысл сделать таким..
а вот сам объект внешнего соединения - вряд ли
|
|