|
аналог lock в 1С | ☑ | ||
---|---|---|---|---|
0
Кукурузина
06.01.17
✎
15:04
|
Если взять за пример другой язык программирования в них существуют различные инструменты для синхронизации потоков, например lock{} (в C#) т.е. обернув какой-то участок кода в lock мы будем уверены, что этот код будет выполнен последовательно. Вот нужно так же в 1С сделать )) т.е. что бы конкретная процедура выполнялась последовательно.
Пример: запуск в фоне процедура1 процедура1 - ветвится: процедура1 вызов процедура2 вызов процедура3 вызов процедура5 вызов процедура7 - и вот только 7-ю нужно выполнять последовательно, что бы ФЗ ожидали выполнение этой процедуры другим ФЗ вызов процедура6 вызов процедура4 |
|||
1
vde69
06.01.17
✎
15:09
|
в 1с, в рамках одного фонового задания отсутствуют потоки и параллелизм....
чего конкретно тебе надо? |
|||
2
Неверный Параметр И
06.01.17
✎
15:09
|
||||
3
Кукурузина
06.01.17
✎
15:10
|
(1) а кто говорил про одно?
|
|||
4
Кукурузина
06.01.17
✎
15:11
|
(2) это блокировки БД, причем тут они?
|
|||
5
vde69
06.01.17
✎
15:12
|
(3) ты хочешь все процедуры из (0) запускать в разных фоновых заданиях?
|
|||
6
Кукурузина
06.01.17
✎
15:14
|
(5) какие все? запускается только одна процедура1, но она вызывает другие процедуры и функции, которые в свою очередь тоже что-то вызывают и да, процедура1 будет выполняться в параллельно (в нескольких ФЗ)
|
|||
7
NorthWind
06.01.17
✎
15:18
|
(6) думается мне, вы от эски многого хотите. Полноценную многопоточность с критическими секциями, семафорами и т.д. она не умеет пока.
|
|||
8
Кукурузина
06.01.17
✎
15:19
|
(7) ясно, буду искать пути решения
|
|||
9
vde69
06.01.17
✎
15:20
|
(6) то есть алгоритм такой
1. вызываем несколько фоновых заданий, в каждом из которых выполняется "процедура1" которая может вызывать строго последовательно другие функции но не запускает другие фоновые задания 2. когда все фоновые задания закончились - вызываем "процедура7" с мараметрами получеными из предыдущих фоновых заданий я все правильно расписал? |
|||
10
vde69
06.01.17
✎
15:21
|
(7) Вы зря так категоричны... я делал и семофоры и паралеьные данные....
давайте для начала поймем чего автору надо |
|||
11
Кукурузина
06.01.17
✎
15:23
|
(9) нет
(10) чего мне надо я написал, ты работал с многопоточностью в других языках, знаешь что такое критические секции? Вот их аналог нужно реализовать. |
|||
12
NorthWind
06.01.17
✎
15:25
|
(9) ему критическую секцию надо. Т.е. ему нужно где-то в недрах фонового задания выполнить кусок кода, который будет выполняться до конца, а задания должны перекуривать до тех пор пока он не закончится. И потом они должны продолжиться.
|
|||
13
vde69
06.01.17
✎
15:29
|
(11) есть много вариантов,
1. например сделать семофор через блокировку предопределенного элемента справочника и ожидание остальными снятия блокировки. (но тут проблемы с паузой, и загрузкой ЦП) 2. сделать управление через один главный поток (который будет все синхронизировать), тут будет медленно... 3. можно через внешний COM обьект (но его писать надо) я так до конца и не понял чего надо автору... |
|||
14
NorthWind
06.01.17
✎
15:30
|
даже правильнее так: в недрах *одного из* фоновых заданий выполнить некий кусок кода, тогда как *остальные* задания должны остановиться и ждать пока выполнится. Затем эти остановленные задания должны продолжить работу с того места где остановились. Не, мне кажется, нормально на 1С это не сделать. Во всяком случае не знаю как.
|
|||
15
vde69
06.01.17
✎
15:31
|
(12) а, ему нужно остановить все другие рег задания пока не продет одно... тогда блокировка предопределенного элемента...
|
|||
16
NorthWind
06.01.17
✎
15:36
|
(15) ну да. Когда я писал, что не умеет, я имел в виду отсутствие средств языка или библиотек. Сгородить можно, но придется велосипедить, и не факт что получится хорошо.
|
|||
17
Неверный Параметр И
06.01.17
✎
15:39
|
(4) При том, что блокировка и ожидание ресурсов, которым являются твои критические секции, в 1с делаются через общие объекты в базе данных.
Можешь, конечно изобретать квадратные трехколесные, зато свои. |
|||
18
vde69
06.01.17
✎
15:42
|
(16) из специальных средств управления фоновыми заданиями есть только самый минимум, это сообщение из фона в вызвавшую сессию и пожалуй все...
вообще асинхронность 1с продвигает только для клиентской части, фоновые и рег зания можно рассматривать как отдельную самостоятельную и логически законченную сессию. и исходить нужно именно из этого |
|||
19
Garykom
гуру
06.01.17
✎
16:31
|
(0) Тока не говори что в королевстве кривых зеркал задумали многопоточность с честной асинхронностью делать
|
|||
20
H A D G E H O G s
06.01.17
✎
16:37
|
В 1С нет и не будет всех этих мьютексов. По причине:
1) Кластерности сервера 1С. 2) отсутствия обратного вызова сервер>клиент |
|||
21
H A D G E H O G s
06.01.17
✎
16:37
|
Делать критические секции на объектах БД - верх жести.
|
|||
22
Garykom
гуру
06.01.17
✎
17:10
|
(20) 1. Пофиг на кластерность сервера 1С, ибо многозадачности будут отдельные для клиента и сервера и для сервера тока в одном потоке "субпотоки"
2. Уже сделали же, точнее нечто вроде |
|||
23
Кукурузина
06.01.17
✎
17:17
|
(17) facepalm
|
|||
24
Кукурузина
06.01.17
✎
17:29
|
(20) причины не ахти, разрабатывают же клиент серверные приложения на языках поддерживающих все прелести многопоточности
|
|||
25
Cool_Profi
06.01.17
✎
17:35
|
(24) Зачем в бухгалтерии многопоточность?
|
|||
26
Кукурузина
06.01.17
✎
17:42
|
(25) почему обязательно бухгалтерия? Может у меня загрузка чего-то в БД происходит, логично ж делать загрузку параллельно
|
|||
27
Cool_Profi
06.01.17
✎
17:45
|
(26) Для этого вполне достаточно имеющихся средств
|
|||
28
H A D G E H O G s
06.01.17
✎
17:50
|
(24) Всё опять упирается в сериализацию 1С, вернее в быстродействие.
|
|||
29
DmitrO
06.01.17
✎
17:58
|
(0)для этого есть только метод ОжидатьЗавершения у задания, и у МенеджераФоновыхЗаданий.
|
|||
30
DmitrO
06.01.17
✎
18:02
|
И да, не будет работать в файловом режиме, и в мобильной платформе. В этих режимах у 1С только одно фоновое задание (чистый идиотизм).
|
|||
31
trdm
06.01.17
✎
18:05
|
(10) > Вы зря так категоричны... я делал и семофоры и паралеьные данные....
Не особо типичная задача для учетной системы. |
|||
32
Кукурузина
06.01.17
✎
18:13
|
(29) аааааа.... ну не позорьте вы профессию программиста!!!
|
|||
33
DmitrO
06.01.17
✎
18:17
|
(32)Это точно мне? :) Чем же я запятнал ее, сударь? Я подсказал вам способ решения вашей задачи.
|
|||
34
vde69
06.01.17
✎
18:57
|
(31) я делал анализатор сети (в рамках 1с), там мне нужно было выполнять много сетевых операций с таймаутом, и я это делал в много потоков.
да к учету это не сильно относится, это скорее tools для 1с... |
|||
35
trdm
06.01.17
✎
19:02
|
(34) А вот аналог аськи или скайпа в 1С - это одна из нужных на мой взгляд вещей.
|
|||
36
vde69
06.01.17
✎
19:04
|
(35) уже реализована на уровне платформы :) недавно было в зазеркалье
|
|||
37
Torquader
06.01.17
✎
19:19
|
Сдались вам мутексы и прочее.
Выносите код,который должен исполняться в один поток,в отдельное фоновое задание,чтобы тот,кому он нужен,запускали это задание и ждали его завершения - уж фоновое то несколько раз не запустить. А через базу не очень хорошо,так как в транзакциях можно что-то не то залочить - точнее, вы блокируете объект и начинаете что-то делать, открываете транзакцию - снимаете блокировку с объекта, но, если вы в нём что-то поменяли, то он будет заблокирован для чтения до окончания транзакции - и ой. |
|||
38
Serginio1
06.01.17
✎
19:27
|
(35) Бери 1C Messenger для отправки сообщений, файлов и обмена данными между пользователям
Можешь написать свой (36) Там самому то написать несложно. Непонятно, почему они так долго тянули. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |