Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
 Аватар для Dimon_bogoduhov
127 / 62 / 2
Регистрация: 15.02.2012
Сообщений: 127

Как избежать зависания программы при длительных операциях

20.02.2012, 01:28. Показов 5293. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что мне сделать что б окно во время выполнения не висло ( все buttons не активны, визуально висит, но сама программа выполняет все нужние действия). Дело в том что в программе присутствует огромный цикл по проверке
Visual Basic
1
2
3
For i = 0 To 70000000
.....
next i
Что мне сделать что б она не глючила???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2012, 01:28
Ответы с готовыми решениями:

Модальное окно при длительных операциях
Добрый день, коллеги. Суть проблемы: необходимо во время запуска длительной операции показывать пользователю модальное окно с надписью...

Как избежать зависания формы при использовании n потоков?
Здравствуйте. У меня есть код, в котором выполняется ёмкий цикл, чтобы не зависала форма я его запускаю отдельным потоком(bw), но если я...

Как избежать зависания на Socket.Send()?
Вообщем при большом трафике на сервере (C# Mono Ubuntu 16.04) как я понял если клиент отключается в момент отправки пакета, то весь поток...

13
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.02.2012, 02:31
Сам же говоришь, что программа не глючит, а выполняет свою работу.
Пути два.
1. Уменьшить количество в цикле(хотя ещё вопрос, что в цикле делается)
2. Ждать когда программа выполнит работу.
3. Можно внутри цикла поставить DoEvents, но тогда и время работы увеличится. Хоть и не будет эфекта подвисания
1
 Аватар для Dimon_bogoduhov
127 / 62 / 2
Регистрация: 15.02.2012
Сообщений: 127
20.02.2012, 02:36  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
1. Уменьшить количество в цикле(хотя ещё вопрос, что в цикле делается)
В данном случае это не допустимо
Цитата Сообщение от Alex77755 Посмотреть сообщение
2. Ждать когда программа выполнит работу.
Оно пока так и есть, но одно плохо не активна форма((

Цитата Сообщение от Alex77755 Посмотреть сообщение
3. Можно внутри цикла поставить DoEvents
Куда именно его поставить? Я поставил в начало, ничего не изменилось(
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.02.2012, 02:38
между For и Next
0
 Аватар для Dimon_bogoduhov
127 / 62 / 2
Регистрация: 15.02.2012
Сообщений: 127
20.02.2012, 02:39  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
между For и Next
Не помогло(
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.02.2012, 02:45
но одно плохо не активна форма
все buttons не активны, визуально висит
Почему?

ничто не виснет. Форма подчиняется - перетаскивается. Кнопка нажимается
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Dim U As Boolean
Private Sub Комманда1_Click()
U = False
Dim J
For J = 1 To 7000000
DoEvents
Caption = J
If U Then Exit Sub
Next J
 
End Sub
 
Private Sub Комманда2_Click()
U = True
End Sub
0
 Аватар для Dimon_bogoduhov
127 / 62 / 2
Регистрация: 15.02.2012
Сообщений: 127
20.02.2012, 02:47  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
ничто не виснет. Форма подчиняется - перетаскивается. Кнопка нажимается
Может из-за того что код в цикле большой?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
20.02.2012, 02:49
Я ставил в 10 раз больше твоего - работает. Что в цикле?
0
 Аватар для Dimon_bogoduhov
127 / 62 / 2
Регистрация: 15.02.2012
Сообщений: 127
20.02.2012, 02:53  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
Что в цикле?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
DoEvents
nextItem:
     basar = adress(versiya) + i
     hndl = OpenProcess(PROCESS_VM_READ, True, ProcessID)
     MemoryID = ReadProcessMemory(hndl, ByVal basar, ByVal VarPtr(MyBuffer(0)), sz, WBytes)
     CloseHandle (hndl)
         Values = Hex(MyBuffer(0)) & Hex(MyBuffer(1)) & Hex(MyBuffer(2))
         If Values = metka(versiya) Then
parol = ""
i = i + 1094
sz = 16
basar = adress(versiya) + i
     hndl = OpenProcess(PROCESS_VM_READ, True, ProcessID)
     MemoryID = ReadProcessMemory(hndl, ByVal basar, ByVal VarPtr(MyBuffer(0)), sz, WBytes)
     CloseHandle (hndl)
For n = 0 To 15
If MyBuffer(n) = 0 Then
n = 15
Else
Text1.Text = Text1.Text & Chr(MyBuffer(n))
End If
Next n
    If Text1.Text = "" Or Len(Text1.Text) > 15 Then
    Text1.Text = ""
    GoTo nextItem
        Else
    List1.AddItem (Text1.Text)
    removeEnable
Exit Sub
    End If
End If
 
If i <= 70000000 Then
progress = i
ProgressBar1.Value = (progress / 70000000) * 100
Else
Exit Sub
End If
If Hex(MyBuffer(1)) = "DC" Then
i = i + 1
GoTo nextItem
End If
If Hex(MyBuffer(2)) = "DC" Then
i = i + 2
GoTo nextItem
End If
If Hex(MyBuffer(3)) = "DC" Then
i = i + 3
GoTo nextItem
End If
If Hex(MyBuffer(4)) = "DC" Then
i = i + 4
GoTo nextItem
End If
If Hex(MyBuffer(5)) = "DC" Then
i = i + 5
GoTo nextItem
End If
If Hex(MyBuffer(6)) = "DC" Then
i = i + 6
GoTo nextItem
End If
If Hex(MyBuffer(7)) = "DC" Then
i = i + 7
GoTo nextItem
End If
If Hex(MyBuffer(8)) = "DC" Then
i = i + 8
GoTo nextItem
End If
If Hex(MyBuffer(9)) = "DC" Then
i = i + 9
GoTo nextItem
End If
If Hex(MyBuffer(10)) = "DC" Then
i = i + 10
GoTo nextItem
End If
If Hex(MyBuffer(11)) = "DC" Then
i = i + 11
GoTo nextItem
End If
If Hex(MyBuffer(12)) = "DC" Then
i = i + 12
GoTo nextItem
End If
If Hex(MyBuffer(13)) = "DC" Then
i = i + 13
GoTo nextItem
End If
If Hex(MyBuffer(14)) = "DC" Then
i = i + 14
GoTo nextItem
End If
If Hex(MyBuffer(15)) = "DC" Then
i = i + 15
GoTo nextItem
End If
i = i + 16
GoTo nextItem
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
20.02.2012, 03:16
Почаще наставь DoEvents раз надо форму трогать...
1
 Аватар для Dimon_bogoduhov
127 / 62 / 2
Регистрация: 15.02.2012
Сообщений: 127
20.02.2012, 03:28  [ТС]
Цитата Сообщение от morgann55 Посмотреть сообщение
Почаще наставь DoEvents раз надо форму трогать...
А вот это помогло))) и не особо дольше стал код виполнятся))
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
20.02.2012, 03:29
На ProgressBar1 обязательно поставь (может даже лучше сделать чаще ЕГО обновление).
1
 Аватар для Dimon_bogoduhov
127 / 62 / 2
Регистрация: 15.02.2012
Сообщений: 127
20.02.2012, 03:55  [ТС]
Цитата Сообщение от morgann55 Посмотреть сообщение
На ProgressBar1 обязательно поставь (может даже лучше сделать чаще ЕГО обновление).
ОК!
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
20.02.2012, 15:42
Цитата Сообщение от Dimon_bogoduhov Посмотреть сообщение
А вот это помогло))) и не особо дольше стал код виполнятся))
Если ничего не кликать в ходе процесса, то DoEvents не сильно тормозит....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2012, 15:42
Помогаю со студенческими работами здесь

Избавиться от зависаний выполнения программы при длительных вычислениях
Если программа выполняет большое количество вычислений, то окно программы становится неактивным (и попутно все изменения в графических...

Как избежать запуска формы при запуске программы?
Здравствуйте. Поделитесь знанием пожалуйста, как можно скрыть форму, её визуал после запуска программы? Чтобы она просто работала в фоне

Избавиться от зависания программы при расчетах
Здравствуйте! Столкнулся с такой проблемкой, программа не желает считать, при запуске происходит зависание программы. Просматривал...

Поиск файлов. При закрытии программы - зависания.
подскажите что не так. первый раз при входе в windows выполняю поиск - ищет довольно долго. второй раз поиск - быстро ищет и все...

Зависания программы при использовании компоненты MediaPlayer
помогите у меня программа выдаёт ошибку когда исползую компоненту медиаплейер. после нажатия кнопки Ф9 программа зависает. после...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru