Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.251.22] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Доброго времени суток! У меня есть программа по созданию AVI из кадров, так в тот момент, когда рендерится AVI файл, программа примерно на середине зависает и так до конца. Нельзя ли как-нибудь сделать так, чтобы программа вообще не зависала, мне вообще нужно, чтобы она прогресс рисовала, а поскольку она виснет, то прогресса я всё равно не увижу. Что можно сделать? Пример в аттаче.
Прикреплённый файлavisimple.rar (12,4 Кбайт, скачиваний: 175) |
Сообщ.
#2
,
|
|
|
Есть цикл? Добавь DoEvents внутрь цикла.
Добавлено Добавь doeents сразу после иксменения прогресса. |
Сообщ.
#3
,
|
|
|
спасибо, а через API - никак?
|
Сообщ.
#4
,
|
|
|
Можно но не нужно.
Если о-о-о-чень хочется, то запусти второй тред с помошью АПИ (SetWindowLong, CallWindowProc)и в нем обрабатывай видео. У кого приложение упало, я не виноват! |
Сообщ.
#5
,
|
|
|
MIF, то есть получается так: в первом процессе я рисую прогресс, а во втором обрабатываю видео? А как передавать обработку видео на второй процесс? Можно по подробнее??
|
Сообщ.
#6
,
|
|
|
Цитата salieri @ второй процесс? MIF предложил поток (тред), а не процесс. Процесс более громоздкий, поток по "легче" будет Добавлено 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 не используются запустились ВСЕ, причём я даже не надеялся на это... |
Сообщ.
#7
,
|
|
|
VisualProg, спасибо, эту задачу я решил, но у меня ещё куча задач, мне всё таки хотелось бы знать, как это можно с помощью API реализовать? Конкретно: как создавать тред? как передавать с задачу с одного треда на другой? как вообще передавать задачу на тред? как их синхронизировать, чтобы рисовать прогресс именно в связи выполнения второго треда?
|
Сообщ.
#8
,
|
|
|
Читай об ОС, там всё подробно расписано. Для синхронизации тредов используют глобальные переменные. Для создания тредов... насчёт VB не знаю, в Delphi всё интегрированно, а в VB не видел... возможно без апи не обойтись.
|
Сообщ.
#9
,
|
|
|
Цитата VisualProg @ возможно без апи не обойтись я только "за". А какие API нужны для этого? |
Сообщ.
#10
,
|
|
|
VisualProg, так какие API функции нужны?
|
Сообщ.
#11
,
|
|
|
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 Это? |
Сообщ.
#12
,
|
|
|
VisualProg, а как их использовать в данной задаче? Как создать тред и как его синхронизировать? Можно поподробнее?
|
Сообщ.
#13
,
|
|
|
salieri, Вы меня удивляете. Единственно правильное, с точки зрения создателей VB6, решение — вставить в цикл DoEvents и радоваццо. А превращать программу на VB в смесь глюков и тормозов msvbvm с низкоуровневыми вызовами системных API — так может вам лучше всё-таки сразу на "чистом" C/C++ программить? геморрой тот же, а результат всё-таки получше...
[добавлено позже] нехочу лишним постом оффтопить... salieri, идеальный ответ на ваш вопрос — в моей подписи. На vb.net вы решите свою проблему быстро, легко и без ректальных костылей. |
Сообщ.
#14
,
|
|
|
DarknessPaladin, я с Вами согласен, но пока не хочу с c++ заморачиваться. Так как эти функции использовать-то?
|
Сообщ.
#15
,
|
|
|
salieri, а что гугль\МСДН скрывают от вас этот секрет7?
|