На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как сделать, чтобы программа не зависала
    Доброго времени суток! У меня есть программа по созданию AVI из кадров, так в тот момент, когда рендерится AVI файл, программа примерно на середине зависает и так до конца. Нельзя ли как-нибудь сделать так, чтобы программа вообще не зависала, мне вообще нужно, чтобы она прогресс рисовала, а поскольку она виснет, то прогресса я всё равно не увижу. Что можно сделать? Пример в аттаче.

    Прикреплённый файлПрикреплённый файлavisimple.rar (12,4 Кбайт, скачиваний: 175)
      Есть цикл? Добавь DoEvents внутрь цикла.

      Добавлено
      Добавь doeents сразу после иксменения прогресса.
        спасибо, а через API - никак?
          Можно но не нужно.

          Если о-о-о-чень хочется, то запусти второй тред с помошью АПИ (SetWindowLong, CallWindowProc)и в нем обрабатывай видео.
          У кого приложение упало, я не виноват!
            MIF, то есть получается так: в первом процессе я рисую прогресс, а во втором обрабатываю видео? А как передавать обработку видео на второй процесс? Можно по подробнее??
              Цитата salieri @
              второй процесс?

              MIF предложил поток (тред), а не процесс. Процесс более громоздкий, поток по "легче" будет

              Добавлено
              ExpandedWrap disabled
                For I = 1 To lvwFiles.ListItems.Count
                     s$ = App.Path & IIf(right$(App.Path, 1) <> "\", "\", "") & "temp.bmp"
                     Set picTemp.Picture = LoadPicture(lvwFiles.ListItems(I).Text)
                     Call StretchBlt(picSave.hdc, 0, 0, picSave.ScaleWidth, picSave.ScaleHeight, picTemp.hdc, 0, 0, picTemp.ScaleWidth, picTemp.ScaleHeight, SRCCOPY)
                     picSave.Refresh
                     Set picSave.Picture = picSave.Image
                     Call SavePicture(picSave.Picture, s$)
                 
                     bmp.CreateFromFile (s$) 'load the bitmap (ignore errors)
                     res = AVIStreamWrite(psCompressed, I - 1, 1, bmp.PointerToBits, bmp.SizeImage, AVIIF_KEYFRAME, ByVal 0&, ByVal 0&)
                     If res <> AVIERR_OK Then GoTo Error
                     slPre.Value = I
                     DoEvents
                    Next

              Попробуй так, и не надо никакие WinApi

              Добавлено
              Кстати, недавно предаставилась возможность "поработать" за Windows2000/Milenium/98 с оборудованием примерно моего возраста, так вот - практика показала, что часть моих программ написанных на VB6.0 с использованием WinApi - попросту не работают под этими ОС, однако программы, где WinApi не используются запустились ВСЕ, причём я даже не надеялся на это...
              Сообщение отредактировано: VisualProg -
                VisualProg, спасибо, эту задачу я решил, но у меня ещё куча задач, мне всё таки хотелось бы знать, как это можно с помощью API реализовать? Конкретно: как создавать тред? как передавать с задачу с одного треда на другой? как вообще передавать задачу на тред? как их синхронизировать, чтобы рисовать прогресс именно в связи выполнения второго треда?
                  Читай об ОС, там всё подробно расписано. Для синхронизации тредов используют глобальные переменные. Для создания тредов... насчёт VB не знаю, в Delphi всё интегрированно, а в VB не видел... возможно без апи не обойтись.
                  Сообщение отредактировано: VisualProg -
                    Цитата VisualProg @
                    возможно без апи не обойтись

                    я только "за". А какие API нужны для этого?
                      VisualProg, так какие API функции нужны?
                        ExpandedWrap disabled
                          Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
                          Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

                        Это?
                        Сообщение отредактировано: VisualProg -
                          VisualProg, а как их использовать в данной задаче? Как создать тред и как его синхронизировать? Можно поподробнее?
                            salieri, Вы меня удивляете. Единственно правильное, с точки зрения создателей VB6, решение — вставить в цикл DoEvents и радоваццо. А превращать программу на VB в смесь глюков и тормозов msvbvm с низкоуровневыми вызовами системных API — так может вам лучше всё-таки сразу на "чистом" C/C++ программить? геморрой тот же, а результат всё-таки получше...

                            [добавлено позже]
                            нехочу лишним постом оффтопить...
                            salieri, идеальный ответ на ваш вопрос — в моей подписи. На vb.net вы решите свою проблему быстро, легко и без ректальных костылей.
                            Сообщение отредактировано: DarknessPaladin -
                              DarknessPaladin, я с Вами согласен, но пока не хочу с c++ заморачиваться. Так как эти функции использовать-то?
                                salieri, а что гугль\МСДН скрывают от вас этот секрет7?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0432 ]   [ 18 queries used ]   [ Generated: 30.04.24, 13:36 GMT ]