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

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

05.04.2012, 12:28. Показов 4789. Ответов 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
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
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
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
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
8488 / 6155 / 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
8488 / 6155 / 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
8488 / 6155 / 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
8488 / 6155 / 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
8488 / 6155 / 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru