Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
1 / 1 / 1
Регистрация: 24.03.2012
Сообщений: 138

Асинхронные процессы

18.10.2013, 09:53. Показов 5668. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В гугле не смог найти никакой пример, изложена только теория, из которой ничего не понял.
На форме у меня два индикатора с разным максимальным значением.
Как можно организовать параллельное заполнение этих индикаторов по нажатию кнопки?
Подскажите, что конкретно сделать, или где найти подробный пример?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2013, 09:53
Ответы с готовыми решениями:

Асинхронные процессы и Flask
Существует мой проект, в котором я из веб-сервера, сделанного на Flask запускаю bash скрипт запуска программ и обработку различной...

Замирает компьютер, все процессы замораживаются, но курсор передвигается и некоторое время можно переключатся на другие процессы
Добрый Вечер. Суть проблемы, собрал компьютер на базе: CPU: AMD FX-8320 Mать: AsRock 990FX Extreme3 Видео: AMD RADEON HD6950 ...

Процессы с адм. правами и незакрываемые процессы
Доброго времени суток. Появилась необходимость создать незакрываемый процесс. Такое вообще возможно? Если нет, то возможно ли осуществлять...

31
858 / 657 / 112
Регистрация: 01.11.2012
Сообщений: 2,411
18.10.2013, 10:31
А более подробно опишите задачу?
Мне кажется с помощью ОбработкиОжидания наверное как-то можно.
0
1 / 1 / 1
Регистрация: 24.03.2012
Сообщений: 138
18.10.2013, 10:37  [ТС]
Ну можно даже две кнопки, каждая запускает свой индикатор.
Нужно сделать так, чтобы при запуске одного форма не замораживалась, можно было запустить второй и они одновременно заполнялись, как-то так.
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 11:22
Оповещение формы это отдельный геморой

Добавлено через 41 секунду
Т.е. тебе придется постоянно возвращать значения с сервера для обработки на форме

Добавлено через 21 секунду
Вместо производительности ты получишь ТОРМОЗА

Добавлено через 49 секунд
Вот параллельно запускать обработку большого массива данных не оповещая форму о состоянии выполнения можно сделать не сложно...
0
1 / 1 / 1
Регистрация: 24.03.2012
Сообщений: 138
18.10.2013, 11:22  [ТС]
Препод хочет, чтобы я сделал. Тормоза ладно, можете расписать, как это реализовать?
0
212 / 185 / 32
Регистрация: 24.10.2011
Сообщений: 762
18.10.2013, 11:28
А разве 1с ввела многопоточность?
Асинхронно можно выполнять действия, но параллельно рассчитывать не получится.
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 12:09
Держи пример для обычного приложения
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//Модуль формы
Перем КлючИндикатор1, КлючИндикатор2; //Или кнопок - как тебе удобнее
 
Процедура ЗаполнитьИндикатор1() //просто заполняет индикатор на форме, демонстрируя, что все работает.
    
    ФильтрОтбора = Новый Структура("Ключ,Наименование,Состояние", КлючИндикатор1, "Тестовое ФЗ", СостояниеФоновогоЗадания.ЗавершеноАварийно);
    МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ФильтрОтбора);
    
    Если МассивЗаданий.Количество() > 0 И НЕ МассивЗаданий[0].ИнформацияОбОшибке.Описание = "" Тогда
        //получили данные из Фонового задания, поместили их в Табличное поле
        СчетчикСтрокой = МассивЗаданий[0].ИнформацияОбОшибке.Описание;
        ЭлементыФормы.Индикатор1.Значение = Число(СчетчикСтрокой);
        ОтключитьОбработчикОжидания("ЗаполнитьИндикаторы1");
        Если ЭлементыФормы.Индикатор1.Значение < 100 Тогда 
            ВыполнитьОбработкуФормы1();
        КонецЕсли; 
    КонецЕсли;
    
КонецПроцедуры
 
Процедура ЗаполнитьИндикатор2() //просто заполняет ТабличноеПоле на форме, демонстрируя, что все работает.
    
    ФильтрОтбора = Новый Структура("Ключ,Наименование,Состояние", КлючИндикатор2, "Тестовое ФЗ", СостояниеФоновогоЗадания.ЗавершеноАварийно);
    МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ФильтрОтбора);
    
    Если МассивЗаданий.Количество() > 0 И НЕ МассивЗаданий[0].ИнформацияОбОшибке.Описание = "" Тогда
        //получили данные из Фонового задания, поместили их в Табличное поле
        СчетчикСтрокой = МассивЗаданий[0].ИнформацияОбОшибке.Описание;
        ЭлементыФормы.Индикатор2.Значение = Число(СчетчикСтрокой);
        ОтключитьОбработчикОжидания("ЗаполнитьИндикаторы2");
        Если ЭлементыФормы.Индикатор2.Значение < 100 Тогда 
            ВыполнитьОбработкуФормы2();
        КонецЕсли; 
    КонецЕсли; 
    
КонецПроцедуры
 
 
Процедура ВыполнитьОбработкуФормы1()
    
    КлючИндикатор1 = Новый УникальныйИдентификатор;
    //размерность массива - по числу параметров запускаемой в фоновом режиме процедуры
    МассивПараметров1 = Новый Массив(1);
    МассивПараметров1[0] = ЭлементыФормы.Индикатор1.Значение;
    
    //внимание! Первый параметр - полный путь к запускаемой процедуре, включая имя общего модуля, в котором она находится.
    ФоновыеЗадания.Выполнить("Модуль.ФоноваяПроцедура", МассивПараметров1, КлючИндикатор1, "Тестовое ФЗ"); // запуск
 
    ПодключитьОбработчикОжидания("ЗаполнитьИндикатор1", 1); //ждем, пока ФЗ нам что-то вернет.
    
КонецПроцедуры
 
Процедура ВыполнитьОбработкуФормы2()
    
    КлючИндикатор2 = Новый УникальныйИдентификатор;
    //размерность массива - по числу параметров запускаемой в фоновом режиме процедуры
    МассивПараметров2 = Новый Массив(1);
    МассивПараметров2[0] = ЭлементыФормы.Индикатор2.Значение;
    
    //внимание! Первый параметр - полный путь к запускаемой процедуре, включая имя общего модуля, в котором она находится.
    ФоновыеЗадания.Выполнить("Модуль.ФоноваяПроцедура", МассивПараметров2, КлючИндикатор2, "Тестовое ФЗ");
 
    ПодключитьОбработчикОжидания("ЗаполнитьИндикатор2", 1); //ждем, пока ФЗ нам что-то вернет.
    
КонецПроцедуры
 
Процедура Кнопка1Нажатие(Элемент)
    
    ЭлементыФормы.Индикатор1.Значение = 0;
    ВыполнитьОбработкуФормы1();
    
КонецПроцедуры
 
Процедура Кнопка2Нажатие(Элемент)
    
    ЭлементыФормы.Индикатор2.Значение = 0;
    ВыполнитьОбработкуФормы2();
    
КонецПроцедуры
 
//Общий модуль
//Пример без сохранения результата в базе что бы выиграть чуть чуть во времени
//Параметр - Вход должен иметь тип число
Процедура ФоноваяПроцедура(Вход) Экспорт
    
   Результат = Строка(Вход+1);
   
   ВызватьИсключение Результат; //самое главное, обманем систему, сказав, что возникла ошибка, и в качестве описания ошибки подсунем возвращаемое значение
    
КонецПроцедуры
Во вложении 2 обработки
1ая демонстрация индикаторов - АсинхронноеЗаполнениеИндикаторов.rar
2ая выполняет задания для файлового варианта - ВыполнениеФоновыхЗаданицДляФайловогоВарианта.rar
2
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 12:10
Цитата Сообщение от Volexovich Посмотреть сообщение
А разве 1с ввела многопоточность?
В нет многопоточности, а псевдомногопоточность можно сделать =))
0
858 / 657 / 112
Регистрация: 01.11.2012
Сообщений: 2,411
18.10.2013, 12:28
Если хочешь чтоб отображались 2 индикатора одновременно, вот
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
&НаКлиенте
Процедура Тест()
    Реквизит1=Реквизит1+1;
    if Реквизит1=10 then
        ОтключитьОбработчикОжидания("Тест");
    endif;  
КонецПроцедуры
 
&НаКлиенте
Процедура Тест1()
    Реквизит2=Реквизит2+1;
    if Реквизит2=10 then
        ОтключитьОбработчикОжидания("Тест1");
    endif;  
КонецПроцедуры
 
&НаКлиенте
Процедура Команда1(Команда)
    Элементы.Поле1.МаксимальноеЗначение=10;
    Элементы.Поле1.ОтображатьПроценты=Истина;
    Элементы.Поле1.Видимость=Истина;
    Реквизит1=0;
    ПодключитьОбработчикОжидания("Тест",1,Ложь);
КонецПроцедуры
 
&НаКлиенте
Процедура Команда2(Команда)
    Элементы.Поле2.МаксимальноеЗначение=10;
    Элементы.Поле2.ОтображатьПроценты=Истина;
    Элементы.Поле2.Видимость=Истина;
    Реквизит2=0;
    ПодключитьОбработчикОжидания("Тест1",1,Ложь);
КонецПроцедуры
Но ты должен понимать, что практического применения у этого, никакого нет. Таким образом можно запустить 2 задачи сразу выполнятся, если запускать обработчик на однократное исполнение, но пока они не отработают обновить форму нельзя из них. Да и потом отображение индикатора дико влияет на производительность, поэтому лучше их не использовать на больших объемах данных.
Вложения
Тип файла: rar Обработка1.rar (3.1 Кб, 9 просмотров)
1
18.10.2013, 12:46

Не по теме:

Цитата Сообщение от Dethmontt Посмотреть сообщение
В нет многопоточности, а псевдомногопоточность можно сделать =))
Да уж, заказчик хочет конфетку, а то что нет возможности её сделать его не интересует. По этому все выкручиваются как могут :)

0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 13:00
При больших объемах данных тот способ который я описал дает не плохую производительность

Добавлено через 4 минуты
За счет того что код выполняется в разных процессах
0
1 / 1 / 1
Регистрация: 24.03.2012
Сообщений: 138
18.10.2013, 13:04  [ТС]
Цитата Сообщение от Dethmontt Посмотреть сообщение
Держи пример для обычного приложения
Спасибо! Нашел исходный пример, и уже начал его редактировать.
Код работает, только заполняются индикаторы по очереди, по одному шагу. Поэтому вопрос - если под каждую кнопку в общем модуле создать свою процедуру, то будут ли они заполняться одновременно?
И не совсем понял, что 2-ая обработка делает? Она же почти пустая?))

Цитата Сообщение от Xomych Посмотреть сообщение
Если хочешь чтоб отображались 2 индикатора одновременно, вот
Тоже работает, спасибо! Причем быстрее, чем в обычном приложении. Но у меня как раз обычное)
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 13:09
Это если база файловая - то Асинхронно выполнять ничего не получиться без дополнительного сеанса в базе (нужно запустить 2 или более сеансов)
Запускаешь один сеанса в одном запускаешь вторую обработку (выполнение) - т.е. это процесс будет выполнять вычисления
Запускаешь второй сеанс - в нем первую обработку и тестируешь асинхронное вычисление
0
1 / 1 / 1
Регистрация: 24.03.2012
Сообщений: 138
18.10.2013, 13:10  [ТС]
Цитата Сообщение от Dethmontt Посмотреть сообщение
При больших объемах данных тот способ который я описал дает не плохую производительность
А у меня, даже если МаксимальноеЗначение = 10, очень медленно все происходит.
В настройках установлен "Интервал опроса регламентных заданий" = 5, поэтому каждые 5 сек происходит небольшой подвисон, и после этого обновление индикатора. Как правильнее сделать, чтобы была более плавная работа?
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 13:11
В примере от Xomych выполнение не асинхронно, а последовательно...
0
1 / 1 / 1
Регистрация: 24.03.2012
Сообщений: 138
18.10.2013, 13:11  [ТС]
Цитата Сообщение от Dethmontt Посмотреть сообщение
Это если база файловая - то Асинхронно выполнять ничего не получиться без дополнительного сеанса в базе
Запускаешь два сеанса в одном запускаешь вторую обработку (выполнение) - т.е. это процесс будет выполнять вычисления
Запускаешь второй сеанс - в нем первую обработку и тестируешь асинхронное вычисление
Ничего не понял из этого, но не суть) Главное, что работает)
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 13:12
Цитата Сообщение от PatrickX3 Посмотреть сообщение
А у меня, даже если МаксимальноеЗначение = 10, очень медленно все происходит.
В настройках установлен "Интервал опроса регламентных заданий" = 5, поэтому каждые 5 сек происходит небольшой подвисон, и после этого обновление индикатора. Как правильнее сделать, чтобы была более плавная работа?
Я тебе в самом начале написал, что оповещение формы ЭТО ТОРМОЗА!!!
0
858 / 657 / 112
Регистрация: 01.11.2012
Сообщений: 2,411
18.10.2013, 13:17
Dethmontt, правильно говорит. У меня не асинхронность, а дискретная последовательность, но результат есть
0
1 / 1 / 1
Регистрация: 24.03.2012
Сообщений: 138
18.10.2013, 13:18  [ТС]
Цитата Сообщение от Dethmontt Посмотреть сообщение
Я тебе в самом начале написал, что оповещение формы ЭТО ТОРМОЗА!!!
Понял.
Тогда изменю вопрос: в файловом варианте обязательно ставить "Интервал опроса регламентных заданий" в настройках? А то тогда получается, что второй параметр в следующей строке не работает?
1C
1
ПодключитьОбработчикОжидания("ЗаполнитьИндикатор1", 1);
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
18.10.2013, 13:36
Цитата Сообщение от PatrickX3 Посмотреть сообщение
"Интервал опроса регламентных заданий"
Где ты этот параметр нашел?

Добавлено через 35 секунд
Ты говоришь про какую то типовую конфигурацию???

Добавлено через 25 секунд
Вторая обработка и есть "Интервал опроса регламентных заданий" - там стоит 1 секунда
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2013, 13:36
Помогаю со студенческими работами здесь

Асинхронные контроллеры
Не совсем понимаю как работают асинхронные контроллеры в ASP.NET MVC. Допустим есть два action method-а. Один синхронный второй...

Асинхронные делегаты
Здравствуйте ! Подскажите пожалуйста, (программа рабочая ) для чего в методе public bool Factorize строки : if (m1 ==...

Асинхронные операции
Есть у меня источник с элементами (ObservableCollection), и специальные коллекции &quot;отображения&quot;, тоже типа ObservableCollection....

Асинхронные потоки
Здравствуйте. Всех с праздником. Как в 1000 асинхронных потоках построчно считать файл data.txt; проверив каждую строчку на условие. ...

Асинхронные запросы
Здравия! имеется index.php страница такого вида &lt;form id=&quot;form1&quot; name=&quot;form1&quot; method=&quot;get&quot; action=&quot;show.php&quot;&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru