Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571

При выполнении цикла форма подвисает

05.04.2012, 12:28. Показов 4716. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток форумчани, У меня возникла проблема. При выполнени цикла форма весит.
Я этот цыкл вставил в событие обекта ТАЙМЕР1 и в тело цыкла вставил стору кода
C++
1
Application->ProcessMessages();
дел в том что, тело цыкла при каждом проходе выполняеться через интервал
C++
1
Sleep(y);
Форма весит при выполнении тела цикла, как можно сделать полностью активную форму без подвисонов
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2012, 12:28
Ответы с готовыми решениями:

Зависает форма при выполнении цикла
Всем привет! Пытаюсь посредством цикла перемешать элементы массива, избегая повторов. Пользуюсь таким алгоритмом: randomize; i:=0;...

Java подвисает при выполнении тестов
Собственно сабж. Имею код public class Browser { static FirefoxProfile profile = new FirefoxProfile(); static WebDriver...

Подвисает форма при BeginUpdate у listView
Товарищи, программисты, прошу помочь мне в моей нелёгкой ситуации:) Немного опишу ситуацию. В потоке происходит добавление в...

38
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
05.04.2012, 12:30
Оформить цикл отдельным потоком.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.04.2012, 12:32
Из-за слипа спит, а не подвисает. Убрать и посмотреть.
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 12:36  [ТС]
LK, Так мне нужно чтобы через определенное время тело цикла выполнялось
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.04.2012, 12:40
1. имелось ввиду, проверить, нет ли ошибки в цикле.
2. таймер не подойдет?
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 12:43  [ТС]
Ребята и еще одна просьба, кидайте в пост примеры кодов или Url на этот пример

Добавлено через 1 минуту
LK, ты имеешь введу на форму кинуть таймер и через этот таймер сделать такой же интервал как Sleep();?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.04.2012, 12:48
Да, и в OnTimer впихнуть цикл.
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
05.04.2012, 13:18
старайтесь никогда не использовать
C++
1
Application->ProcessMessages();
поскольку его результаты могут в некоторых случаях вас очень удивить - этот вызов проталкивает все сообщения стоящие в очереди к форме и если ваша программа напрямую или косвенно (в недрах VCL) использует сообщения вы можете попасть на чудеса.
1
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 20:56  [ТС]
vxg, Спасибо за совет!

Добавлено через 2 минуты
Как можно через таймер реализовать Функцию Sleep().
Таким образом чтобы ее можно было в любом месте цикле
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2012, 21:35
Код примера
C++
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
int i=0; // переменная для итераций цикла
int sum=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
Timer1->Enabled= false;
Timer1->Interval= 1000; // время срабатывание таймера 1000 миллисекунд
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
i=0;
sum=0;
Timer1->Enabled= true; // запустить  таймер
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
sum+= i*i;      // вычисление суммы квадратов  чисел от 0 до 5
Caption = i; // В заголовке окна отображается номер итерации
 
if(i>=5)
 {
 Timer1->Enabled= false;// остановить  таймер
 ShowMessage("Сумма равна "+ String(sum));
 }
i++;            // следующее i
}
//---------------------------------------------------------------------------
Вложения
Тип файла: rar Пример.rar (74.1 Кб, 17 просмотров)
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 21:52  [ТС]
У меня задача немного иная!
Архитектуру напишу

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void TForm1::Funct1(int i){
Sleep(1000);
//Код
}
void TForm1::Funct2(int i){
Sleep(1000);
//Код
}
void TForm1::Funct(int i){
   Funct1(i);
   Funct1(i);
}
//---------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   for(int i = 0; i < n; i++){
      Ping(i);
   }
}
Вот там где СОН "Sleep(1000);", нужно как то сделать таймером
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2012, 21:57
C++
1
2
3
4
5
6
7
8
9
10
11
12
//---------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
switch(i)
 {
 case 1: Funct1(i);break;
 case 2: Funct2(i);break; 
 // итд
 default: Timer->Enabled= false;
 }
i++;
}
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 22:13  [ТС]
Avazart, Ты меня не правильно понял Функция "Спать Sleep(1000)" - это стандартная Функция я ее не создавал, Мне нужно место этой функции указывать сколько времени нужно ждать а потом выполнять код в Функцие1!
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2012, 22:17
Приведи весь код, а то я теряюсь в догадках ...
И вообще что программа должна делать?
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 22:24  [ТС]
Avazart, Программа работает, только вот мне этот СОН функция напрягает, при вызове этой функции программа засыпает (иными словами зависает), Архитектура такая же как я приводил в 11 посте. Извини код сейчас не могу показать, Кампа чищу от вирусов!
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2012, 22:26
Создай поток и засунь туда свой код, тогда основной поток не будет подвисать.
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 22:30  [ТС]
Avazart, Вот смотри что код делает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void TForm1::Funct1(int i /*- индекс строки*/){ //В МЕМО1 выводим строки через определенное время
Sleep(1000);//Определенное время (рандом)
//Код который выполняется после [B]сна "Sleep(1000)"[/B]
}
void TForm1::Funct2(int i /*- индекс строки*/){ //В МЕМО2 выводим строки через определенное время
Sleep(1000);//Определенное время (рандом)
//Код который выполняется после [B]сна "Sleep(1000)"[/B]
}
void TForm1::Funct(int i){
   Funct1(i);
   Funct1(i);
}
//---------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   for(int i = 0; i < n; i++){
      Ping(i); // здесь в цикле мы уже выполняем добавления строк в МЕМО1 и МЕМО2
   }
}
Добавлено через 29 секунд
Avazart, можно пример
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2012, 22:41
Используй TThread класс ( читай Архангельского)
Либо используй ф-цию CreateThread
Вложения
Тип файла: rar CreateThread.rar (74.9 Кб, 24 просмотров)
0
 Аватар для gorin
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
05.04.2012, 23:18  [ТС]
Avazart, На кой странице? Архангилска написано?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.04.2012, 23:23
Разработка многопоточных приложений в C++Builder
Многопоточность и синхронизация. Часть 1. Процессы и потоки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2012, 23:23
Помогаю со студенческими работами здесь

Форма подвисает при выводе на неё из других потоков
Доброго времени суток, проблема такая: пишу прогу для АСУТП, которая должна считывать множество данных с устройства и выводить их. Для...

Завис при выполнении цикла
Если в цикле добавлять строки в мемо-поле в большом количестве ну тысяч сто например, то &quot;зависает форма&quot;, как от этого можно...

++i и i++ разница при выполнении цикла
Доброго времени суток! Действительно ли в цикле вида: for(int i = 0; i &lt; n; ++i) {} ++i Будет быстрее чем i++?

Задержка при выполнении цикла
Возможно ли делать задеожку в цикле(уточняю - любого вида). Если да, то как?

При выполнении условия не выходит из цикла
При выполнении условия не выходит из цикла а продолжается и выходит за границы #include &lt;iostream&gt; #include &lt;conio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru