|
|
Многопоточность в обычных формах 1С.
snz1c, TormozIT, Il19, ЕRPe, Sserj, nick86, A_G, PuhUfa, takefive, Hmster, Borometr, n0ther, SeriyP, maxar, ndrv, phabeZ, ReaLg, Ёпрст, Ivanich, ansh15, Рамиль Маугли, boozin, Кир Пластелинин
| ☑ |
|
0
ptiz
02.04.26
✎
10:14
|
Кто-то уже нарывался на такое?
Всё происходит на платформе 8.2 на обычных формах.
Имеем обработку, где есть поле ввода для клавиатурного сканера ШК (с хоткеем F7).
Суть:
- в модуле обработки есть цикл: перебор списка документов для печати, каждый последовательно отправляется на принтер
- после отправки на принтер каждого - вызывается пауза 2 секунды через WScript.Shell и ping
Назовем это Процедура1 - она запустилась, т.к. сканировался очередной ШК.
В это время пользователь на этой же форме сканирует следующий ШК (хотя работает Процедура1 и форма должна быть заблокирована):
- и 1С запускает НОВЫЙ ЭКЗЕМПЛЯР процедуры модуля. Этой же обработки!
Это Процедура2.
В данной конкретной обработке возникает конфликт двух процедур (они блокируют один и тот же справочник) и Процедура2 устанавливает реквизит обработки "ТекстОшибки" (Процедура1 еще выполняется).
А когда Процедура1 заканчивает работу - она в конце анализирует реквизит "ТекстОшибки" - и видит значение, установленное в Процедура2 и пишет его в логи.
Я что-то новое открыл или эта фича давно известна?
|
|
|
1
1cVandal
02.04.26
✎
10:16
|
с асинх сталкивался?
|
|
|
2
Garykom
гуру
02.04.26
✎
10:20
|
(0) Оно со времен 1С 7.7 есть
|
|
|
3
ptiz
02.04.26
✎
10:31
|
(2) Мне интересно, что тогда помешало 1С сделать это реальной фичей, сделав штатной возможность запуска нескольких экземпляров процедуры одновременно, раз оно по факту работает.
|
|
|
4
Garykom
гуру
02.04.26
✎
10:36
|
(3) Мьютексы со светофорами помешали
|
|
|
5
H A D G E H O G s
02.04.26
✎
10:42
|
|
|
|
6
ptiz
02.04.26
✎
10:44
|
(5) Эх, скринов не видно.
|
|
|
7
Sserj
02.04.26
✎
10:51
|
(3) М...
А как по вашему рекурсия работает?
И вообще как по вашему работают процедуры и функции.
Может стоит почитать основы, для общего развития пописать на чистом C.
Понять что такое стек вызовов как он работает в памяти.
|
|
|
8
H A D G E H O G s
02.04.26
✎
10:52
|
(6) Самое забавное - что я не помню, как это сделал.
|
|
|
9
vis
02.04.26
✎
11:14
|
(7) Как рекурсия связана с мнопоточностью?
|
|
|
10
JeHer
02.04.26
✎
11:25
|
(5) ни фига ты некромант. В той ветке уже дофига народу )))
|
|
|
11
Sserj
02.04.26
✎
11:30
|
(9) Так у человека вопрос "..НОВЫЙ ЭКЗЕМПЛЯР процедуры модуля..". А не сама многопоточность.
Да и многопоточностью это назвать можно с сильной натяжкой.
Скорее асинхронность.
Исполнение ушло во вне системы, ядро там оставило точку возврата. А основной оброботчик событий продолжил работать.
|
|