Растолкуйте мне за DoEvents

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Растолкуйте мне за DoEvents

Сообщение Dummiel » 14.04.2006 (Пт) 12:49

Ребята, по голове только не бейте! :wink:

Вижу в прогах DoEvents, а для чего она - толком не знаю. В справочниках пишут, что для передачи процесса операционке. А ЗАЧЕМ?

Пожалуйста, подробнее и на крестьянском уровне, а то я буквы не все знаю, не говоря уж про слова. :lol:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2006 (Пт) 12:58

Сравни:
Код: Выделить всё
Private Sub Form_Click
  Dim I As Long
  For I = 1 To 1000
    Caption = I
  Next I
End Sub

и
Код: Выделить всё
Private Sub Form_Click
  Dim I As Long
  For I = 1 To 1000
    Caption = I
    DoEvents
  Next I
End Sub
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2006 (Пт) 13:07

А вообще, в правильно написанной проге чаще всего можно обойтись без DoEvents.
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.04.2006 (Пт) 13:21

А вообще, в правильно написанной проге чаще всего можно обойтись без DoEvents
Далеко не всегда. Предположим, мне надо отослать файл через инет, и получить обработанный результат(в общем длительный процесс, который может и зависнуть). Мне надо что бы у пользователя была возмодность cancel operation. Как предлагаете сделать без DoEvents.
Кстати, о
В справочниках пишут, что для передачи процесса операционке
Глупость пишут, это можно скзать разве что о SwitchTOThread или о WaitMessage. Но не как ни о DoEvents. То есть это утверждение в корне неправильно.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 14.04.2006 (Пт) 13:31

alibek!
Сравнил. И?
Коды отличаются только наличием/остутствием DoEvents
Я же и прошу разъяснить, для чего он там вставлен.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.04.2006 (Пт) 13:35

Глупость пишут
Это, видимо, автор так пересказал прочитанное, к тому же скорее всего источник был английским :D
DoEvents passes control to the operating system. Control is returned after the operating system has finished processing the events in its queue and all keys in the SendKeys queue have been sent.
Это не означает, что какой-то контрол передается системе, а то, что операционка прекращает выполнение инструкций твоей проги и переходит к другим в очереди.
Сравнил. И?
Поставь бесконечный цикл и сравни еще раз. 1000 слишком мало.
Лучший способ понять что-то самому — объяснить это другому.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 14.04.2006 (Пт) 14:05

Не только код сравни, а и результаты его выполнения ;)
Быть... или не быть. Вот. В чём вопрос?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 14.04.2006 (Пт) 14:09

вернее процесс выполнения
Весь мир матрица, а мы в нем потоки байтов!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.04.2006 (Пт) 14:10

Хм, опять этот неоднозначный комментарий в MSDN :)
а то, что операционка прекращает выполнение инструкций твоей проги и переходит к другим в очереди.

Ммм. Тут вот не сказано, в какой очереди ;) Как вы думаете?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 14.04.2006 (Пт) 14:14

Вон чо!!!
Я в салоне сижу, ща приду - сравню в работе.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.04.2006 (Пт) 14:14

Antonariy писал(а):
Глупость пишут
Это, видимо, автор так пересказал прочитанное, к тому же скорее всего источник был английским :D
DoEvents passes control to the operating system. Control is returned after the operating system has finished processing the events in its queue and all keys in the SendKeys queue have been sent.
Это не означает, что какой-то контрол передается системе, а то, что операционка прекращает выполнение инструкций твоей проги и переходит к другим в очереди.

Видимо, эту часть документации не обновляли со времён Win16 ;-)

На самом деле, естественно, ОС сама выбирает, когда прекратить выполнение одного процесса и перейти к следующему в очереди. DoEvents на эту передачу управления от одного процесса к другому влияет очень слабо.

То, что на самом деле делает DoEvents -- это обрабатывает сообщения, накопившиеся в очереди. Как бы это объяснить по рабоче-крестьянски?
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 14.04.2006 (Пт) 14:28

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

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.04.2006 (Пт) 14:29

Как бы это объяснить по рабоче-крестьянски?
Когда выполняется-какой то твой код, все формы "блокируются", а DoEvents их "разблокирует". Пойдет?

Простыми словами DoEvents дает системе возможность посмотреть на наличие сообщений в очереди и их обработку

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

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Растолкуйте мне за DoEvents

Сообщение Andrey Fedorov » 14.04.2006 (Пт) 16:25

Dummiel писал(а):В справочниках пишут, что для передачи процесса операционке. А ЗАЧЕМ?


Чтобы она могда выполнила то что находится в очереди.

Например, обновить окно твоей программы, обработать нажатие кнопки и прочая, прочая...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 14.04.2006 (Пт) 22:56

alibek писал(а):Сравни:
Код: Выделить всё
Private Sub Form_Click
  Dim I As Long
  For I = 1 To 1000
    Caption = I
  Next I
End Sub

и
Код: Выделить всё
Private Sub Form_Click
  Dim I As Long
  For I = 1 To 1000
    Caption = I
    DoEvents
  Next I
End Sub


лучше 1000 замени на 10000 и пока он выполняется попробуй свернуть окно ;)
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 19.04.2006 (Ср) 13:25

Здравствуйте!
Наконец-то дорвался до И-нета.
Спасибо всем, все опробовал, и все понял.
Во всяком случае, тешу себя надеждой :wink:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 177

    TopList  
cron