![]() |
![]() |
![]() |
|
Обработка прерывания пользователя | ☑ | ||
---|---|---|---|---|
0
BeaViS
11.01.08
✎
14:30
|
Хочется организовать такую обработку прерывания пользователем выполнения кода, чтобы прервано было не все выполние кода, а только текущий цикл.
Сам не придумал, м.б. кто изобретал подобное? |
|||
1
ОператорПК
11.01.08
✎
14:36
|
а что пользователь знает в каком цыкле сейчас находится исполнение?
|
|||
2
ShoGUN
11.01.08
✎
14:37
|
(0) Зачем?
(1) Ну, при желании ему можно об этом сообщать... |
|||
3
BeaViS
11.01.08
✎
14:40
|
(1) ????
Я знаю |
|||
4
BeaViS
11.01.08
✎
14:41
|
(2) Сообщать нельзя ... в моем случае
|
|||
5
Кураж
11.01.08
✎
14:44
|
(0) не получится.
|
|||
6
ShoGUN
11.01.08
✎
14:44
|
(4) Что-то бредом отдает. Как можно управлять тем, о чем нет информации?
|
|||
7
BeaViS
11.01.08
✎
14:48
|
(6) Это технический форум, а не философский )) Мыслим ясно, излагаем четко, абстрагируемся от трансцендентального, оперируем конкретикой :)
|
|||
8
ОператорПК
11.01.08
✎
14:50
|
(7) 10 раз перечитай (7) :)))
|
|||
9
Aloex
11.01.08
✎
14:51
|
ОбработкаПрерыванияПользователя();
|
|||
10
ShoGUN
11.01.08
✎
14:51
|
(7) Ты объясни, чего ты хочешь! Ибо я честно говоря думаю, что на вопрос в текущей формулировке ответ "нет", т.к. в общем случае не зная момента выполнения нельзя предсказать результат выполнения кода. Понятно излагаю?
|
|||
11
Salvador Limones
11.01.08
✎
14:51
|
Бугога!!!
Оперируем конкретикой, но сообщать нельзя!!! |
|||
12
RomaH
naïve
11.01.08
✎
14:52
|
о придумал ...
в теле Вопрос("Выйти из цикла?",1) Если Ответ Да - то Прервать ну или там Перейти |
|||
13
Aloex
11.01.08
✎
14:53
|
пока цикл
Перейти ~конец; Конеццикла ~конец: |
|||
14
BeaViS
11.01.08
✎
14:53
|
(4) Есть цикл, который может стать бесконечным (например, попытка записи в цикле, а данные заблокированы). Цикл должен крутиться, пока его не прервут. Вопросы к пользователю с предложением прервать цикл исключены. После прерывания цикла должен выполниться остальной код.
|
|||
15
ShoGUN
11.01.08
✎
14:54
|
(12) Жесть! :)
|
|||
16
Кураж
11.01.08
✎
14:56
|
Я всё же повторюсь, что это невозможно. Зачем разводить дискуссию?
|
|||
17
Кураж
11.01.08
✎
14:57
|
(14) Можно лишь ограничить такой цикл количеством попыток записи...
|
|||
18
Aloex
11.01.08
✎
14:57
|
(16) Возможно, смотри на конструкцию инструкции в (13).
|
|||
19
ОператорПК
11.01.08
✎
14:57
|
(14) приплыли.... а счетчик слабо сделать на попытку заблокировать объект?
|
|||
20
ShoGUN
11.01.08
✎
14:57
|
(16),(17) +1, и смысла в этом нету. Пользователь может на обед уйти.
|
|||
21
Кураж
11.01.08
✎
14:58
|
(18) ты не в теме.
|
|||
22
ShoGUN
11.01.08
✎
14:59
|
(18) А условие выхода из цикла какое, умник?
|
|||
23
BeaViS
11.01.08
✎
15:05
|
(16) Если этого нет в синтакс-помошнике, это не значит - невозможно.
В таких случаях надо подумать, часто помогает :) |
|||
24
BeaViS
11.01.08
✎
15:07
|
(19) сейчас так и сделано. Но хочется сделать вариант, в котором число попыток неограничено.
|
|||
25
Кураж
11.01.08
✎
15:07
|
(23) Ладно. Если тебя не устраивает правда, можешь долбить дальше...
|
|||
26
ShoGUN
11.01.08
✎
15:09
|
(23) Еще раз говорю - по идее должен быть выход из цикла по условию. Но ЧТО ты собираешься ставить в условие?
|
|||
27
ОператорПК
11.01.08
✎
15:09
|
(24) после N попыток предлагай юзеру выйти из цыкла или пиши это (в Состояние())пока не прервет ффф чем проблема?
|
|||
28
RomaH
naïve
11.01.08
✎
15:09
|
(23) - тогда проверка флага нужна
но флаг придется делать не в текущем сеансе 1С например запустить приложение в фоне которое отслеживает нажатие "хитрой комбинации клавишь" и пишет файл флага - в цикле проверяешь наличие |
|||
29
ShoGUN
11.01.08
✎
15:11
|
(28) Извращение :)
|
|||
30
zbv
11.01.08
✎
15:11
|
А если обрабочик ожидания прикрутить?
мож взлетит... |
|||
31
ShoGUN
11.01.08
✎
15:12
|
(27) Ему надо еще и код исполнять. Загвоздка на самом деле в отсутствии работы с устройствами ввода.
|
|||
32
RomaH
naïve
11.01.08
✎
15:14
|
(29) почему? есть другие варианты при наличии отсутсвия встроеного механизма?
|
|||
33
BeaViS
11.01.08
✎
15:14
|
(28) о, может этот цикл ввиде фонового задания оформить?
тогда флаг выхода из цикла можно будет и в этом сеансе установить ... ИМХО |
|||
34
ОператорПК
11.01.08
✎
15:14
|
(31) а что предлагать юзеру прервать через Предупреждение("Внимание! объект заблокирован",3) или писать в состояние("Внимание! объект заблокирован") - это прервет исполнение кода?
|
|||
35
Aloex
11.01.08
✎
15:15
|
на наличие файла в цикле проверяй, изврат но работать будет.
|
|||
36
BeaViS
11.01.08
✎
15:15
|
(28) С помощью кнопки или "хитрой комбинации клавиш"
|
|||
37
Кураж
11.01.08
✎
15:16
|
(30) не, не будет в цикле работать.
А идея с параллельно запускаемым процессом для отслеживания прерывания и установки флага неплохая, если сделать красиво. Хотя конечно извращение. ) |
|||
38
ShoGUN
11.01.08
✎
15:17
|
(34) Нет, я говорю как собственно само прерывание будет происходить? Штатная возможность - одна - Ctrl-Break - прерывает исполнение кода. И усё.
|
|||
39
ShoGUN
11.01.08
✎
15:18
|
(32) Нету, но извращение же...
|
|||
40
ShoGUN
11.01.08
✎
15:19
|
+(38) Это я про состояние()
|
|||
41
ОператорПК
11.01.08
✎
15:21
|
(38) само прерывание если писать через состояние("Внимание! объект заблокирован") то штатно и будет Ctrl-Break , а не штатно можно через вопрос()
Ответ=Вопрос("",); //(не помню синтаксис) Если Ответ=ДА Тогда//(не помню синтаксис) Прервать; КонецЕсли; |
|||
42
Immortal
11.01.08
✎
15:22
|
(0) схожий вопрос обсуждали..давно.
в общем в 8.0 можно покдлючить обработчик ожидания и в нём уже мутить.. т.е .надо чтобы при выходе из цикла выполнилось условие для обработчика. и делай всё что хочешь. |
|||
43
RomaH
naïve
11.01.08
✎
15:24
|
усовершенствуем сразу
рисуем приложение перед циклом - запускаем его с неким ключем - вешаем в трей оно создает флаг (вот файл, или реестр или еще что - надо смотреть по быстродействию опроса его из 1С) и закрывается или закрываем его из 1С если не востребовано ну и про попытку исключение не забывать |
|||
44
ОператорПК
11.01.08
✎
15:24
|
+(41) надо через вопрос() мутить.......
|
|||
45
ShoGUN
11.01.08
✎
15:25
|
(41) Документацию почитай.
Синтаксис: ОбработкаПрерыванияПользователя() Описание: Предназначен для прерывания работы встроенного языка при нажатии пользователем клавиши Ctrl+Break. Метод проверяет, была ли нажата пользователем клавиша Ctrl+Break. Если клавиша была нажата, то выполнение встроенного языка прекращается и выдается соответствующее сообщение. И где тут можно впендюрить код? |
|||
46
BeaViS
11.01.08
✎
15:27
|
(42) :) нашел ...
|
|||
47
ОператорПК
11.01.08
✎
15:31
|
(45) забей на ОбработкаПрерыванияПользователя()
по некоторому критерию определяем что объет давно блокирован (попробывали N раз блокирнуть не вышло) выдаем вопрос и по итогам ответа либо продолжаем пытаться с ним работать или выходим из цикла по средствам Прервать |
|||
48
BeaViS
11.01.08
✎
15:32
|
(43) Да, это наверное самый разумный выход в моем случае ... либо фича в трее, либо в другом процессе использовать какую-нить обработку, которой буду формировать флаг остановки ... спасиб )
|
|||
49
ОператорПК
11.01.08
✎
15:34
|
(48) а что мешает формировать флаг остановки посредствам подщета неудачных попыток блокировать объект?
|
|||
50
BeaViS
11.01.08
✎
15:34
|
(48) т.е. в другом сеансе 1С
|
|||
51
BeaViS
11.01.08
✎
15:36
|
(49) ну что ты зациклился на этом счетчике?
А если нужно будет прервать раньше, чем достигли счетчика? |
|||
52
ОператорПК
11.01.08
✎
15:37
|
(51) ОбработкаПрерыванияПользователя()
|
|||
53
BeaViS
11.01.08
✎
15:52
|
(52) абзац ...
|
|||
54
ShoGUN
11.01.08
✎
15:55
|
(53) Ты, между прочим, зациклился на "управлении пользователем". Ни к чему оно тут именно в таком виде. Пользователь должен управлять входными параметрами ДО исполнения кода. А процессом исполнения должен управлять программист.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |