Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как прервать выполнение всех процедур?? 
V
    Опции темы
FloodF
Дата 16.4.2006, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



Тоже вопрос по VB6. Программа старается, что-то делает.. и тут нетерпеливый пользователь жмет на кнопку..
Вызывается сл. событие а предыдущие продолжают выполнятся. Как сделать чтобы при нажатии на кнопку все ранее выполнявшиеся процедуры и функции прерывались?
PM MAIL   Вверх
cardinal
Дата 16.4.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Пример приведи... 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Akina
Дата 17.4.2006, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Код

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = kbF10 Then
    End
End If
End Sub
 smile  


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FloodF
Дата 17.4.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



Шутишь? :) Нужно чтобы не вся программа завершалась, а только то что выполнялось ранее! А потом продолжало работать с той процедуры которую вызывает кнопка. Что-то типа рестарта что ли...
PM MAIL   Вверх
cardinal
Дата 18.4.2006, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(FloodF @  17.4.2006,  19:08 Найти цитируемый пост)
а только то что выполнялось ранее

Цикл, процедура или что? Пример же просил... 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Тутанхамец
Дата 18.4.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Может быть, не понял, что тебе нужно, но попробуй в долго выполняющуюся функцию вставить DoEvents. Где-нибудь в цикле. Так твоя функция будет периодически отдавать управление другим событиям (типа нажатия кнопки), а потом возобновлять свое выполнение с того места, где остановилась.

Добавлено @ 09:06 
Вырубать и приостанавливать сабу можно так:

Код

Option Explicit
Dim blnStop As Boolean

Sub SlowSub()
Dim i As Long
For i = 1 To 2 ^ 30
Label1.Caption = CStr(i)
DoEvents
If blnStop Then Exit Sub
Next i
End Sub

Private Sub Command1_Click()
'запустить тормозную процедуру, которая только и знает, что писать в лэйбл числа
SlowSub
End Sub

Private Sub Command2_Click()
'приостановить выполнение процедуры, чтобы что-то сделать
MsgBox ("qq!")
End Sub

Private Sub Command3_Click()
'прервать выполнение процедуры (устанавливается флаг, а собственно выход в самой процедуре)
blnStop = True
End Sub

 
PM MAIL   Вверх
Akina
Дата 18.4.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Да, шучу... вернее, издеваюсь... постановка вопроса, извини, бредовая.

Возможный метод прекращения работы процедуры такой - для каждой процедуры заводится глобальная переменная, и при изменении ее значения происходит прерывание процедуры в тех точках, где это допустимо:

Код

Dim BreakMyProcN as Boolean

Sub MyProcN(parameters)
BreakMyProcN = False
...
If BreakMyProcN Then Exit Sub
...
If BreakMyProcN Then Exit Sub
...
For i = M to N
    If BreakMyProcN Then Exit Sub
    ....
Next
...
Do While (expression)
    If BreakMyProcN Then Exit Sub
    ....
Loop
...
End Sub


Соответственно когда надо прервать выполнение каких-либо процедур, выставляются соответствующие этим процедурам флаги из обработчика клавиатуры:

Код

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = kbF10 Then
    BreakMyProc1 = True
    BreakMyProc2 = True
    BreakMyProc4 = True
    BreakMyProc7 = True
End If
End Sub


Примечание: хуже с функциями - они независимо от того прерваны или отработали до конца обязаны возвратить корректное значение. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FloodF
Дата 19.4.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



способ мне не нравится, но видимо по-другому не сделаешь smile. Спасибо. 
PM MAIL   Вверх
Akina
Дата 20.4.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(FloodF @  19.4.2006,  23:05 Найти цитируемый пост)
способ мне не нравится,

есссно. потому что если что-то подобное нужно - есть перекосы в постановке или реализации. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.