Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > Форум Форум программистов > Форум C++ > Форум C++ Builder
Восстановить пароль Регистрация

Ответ Создать новую тему
 
17.08.2010, 19:16   #1
TitanX
Новичок
Регистрация: 11.06.2010
Сообщений: 6
Репутация: 0 (0)
Как разгрузить процессор при бесконечном цикле / C++ Builder

Код C++
1
2
3
4
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
 while(1) {}; 
}
 Комментарий модератора Папа Карло
Используйте теги кода
17.08.2010, 19:16
AdAgent
Объявления
17.08.2010, 19:45   #2
Monte-Cristo
Форумчанин
Регистрация: 07.03.2009
Сообщений: 4,447
Репутация: 2780 (1351)
Лучшие ответы: 15
Как разгрузить процессор при бесконечном цикле

Процессор, или чтоб gui отвис? Самый лучший способ - вынести бесконечный цикл в поток.
Можно просто выделять процессорное время используя Sleep(0). А вообще, самое рациональное, избегать бесконечных циклов вообще.
Другие темы раздела
Как узнать имя текущего профиля виндовс C++ Builder
застрял на вот такой задаче: как узнать имя текущего профиля виндовс? желательно чтоб работало на ХР,висте и 7 П.С. гугл помогать отказался
Работа с реестром в C++ Builder C++ Builder
Вступление: Данный FAQ тестировался и писался на системе Windows XP SP2. Используемый компилятор: Borland C++ Builder 6.0. Для начала, немного теории о реестре Windows. История появления реестра Давным-давно все настройки программ хранились в Ini-файлах, которые представляли из себя...
17.08.2010, 20:18   #3
Sasha
Форумчанин
Регистрация: 05.06.2008
Сообщений: 5,679
Репутация: 4200 (1889)
Записей в блоге: 3
Лучшие ответы: 73
Как разгрузить процессор при бесконечном цикле

Цитата Сообщение от TitanX Посмотреть сообщение
Код C++
1
2
3
4
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
 while(1) {}; 
}
Используйте теги кода
Код C++
1
2
3
4
5
for (;;)
 
{
 
}
17.08.2010, 20:44   #4
MikeSoft
Форумчанин
Эксперт C++
Регистрация: 21.11.2009
Сообщений: 2,542
Репутация: 3734 (1718)
Лучшие ответы: 80
Как разгрузить процессор при бесконечном цикле

Sasha, немножко не понял вашего совета. Поясните, какую вы видите разницу между while(1) и for(; ?
Оптимизатором будет предпринята операция по исключения проверок (ещё на этапе компиляции вы получите предупреждение "Unreachable code").

TitanX, используйте Sleep(1); или большее значение.
Если вам нужно обработать очередь Windows-сообщений, то лучше Application->ProcessMessages();

Опять же, Monte-Cristo прав, порекомендовав вам использовать потоки для обработки подобных циклов.

Темы потоков поднимались неоднократно... Например, можно посмотреть вот здесь: Ошибка при вызове CreateThread
17.08.2010, 20:44
AdAgent
Объявления
17.08.2010, 21:30  [ТС]   #5
TitanX
Новичок
Регистрация: 11.06.2010
Сообщений: 6
Репутация: 0 (0)
Как разгрузить процессор при бесконечном цикле

Спасибо. sleep(1) помогло.
17.08.2010, 21:35   #6
iama
Нарушитель
Регистрация: 30.07.2010
Сообщений: 5,299
Репутация: 1242 (970)
Лучшие ответы: 12
Как разгрузить процессор при бесконечном цикле

Код C++
1
Application->ProcessMessages 
... или я не в тему?
19.08.2010, 13:13   #7
ProstoMad
Форумчанин
Регистрация: 30.06.2010
Сообщений: 980
Репутация: 44 (34)
Лучшие ответы: 2
Как разгрузить процессор при бесконечном цикле

Как цикл в поток вывести?
19.08.2010, 13:20   #8
MikeSoft
Форумчанин
Эксперт C++
Регистрация: 21.11.2009
Сообщений: 2,542
Репутация: 3734 (1718)
Лучшие ответы: 80
Как разгрузить процессор при бесконечном цикле

ProstoMad, чуть выше я давал ссылку... через неё можно выйти на нужную тему.
Посмотрите пост с примером создания потока: CreateThread
21.08.2010, 10:07   #9
[XandeR]
Форумчанин
Регистрация: 18.03.2009
Сообщений: 380
Репутация: 29 (29)
Записей в блоге: 2
Лучшие ответы: 1
Как разгрузить процессор при бесконечном цикле / C++ Builder

я избегал попадания программы в бесконечный цикл путем установки лимита итераций цикла, например
Код C++
1
2
3
4
5
6
7
while(Replace()){
    erCounter++;
    if (erCounter>200) {
        Aux->Error("Возникло прерывание из-за вероятности входа в бесконечный цикл");
        break;
    }
}
если конечно Вам требуется прерывание
21.08.2010, 10:07
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
C#: Синхронизация потоков в бесконечном цикле
Попробовал написать сначала сюда, но, пожалуй, неправильно выбрал раздел. Есть два примерно одинаковых потока. Основной код в обоих потоках крутится в цикле while, который завершается только при выходе из программы. Поток 1 выполняет некую операцию, на время которой поток 2 должен быть...
C# .NET Kasyan666 12.04.2013 06:08
Visual Basic .NET: Почему зависает программа при бесконечном цикле Do - Loop
Вот собственно программа которую я делал. Но почему-то зависает при старте действий. Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WB1.Navigate(link.Text) Timer1.Start()
Visual Basic .NET _Friz_ 20.09.2012 08:26
C#: .NET 4.x Правильная организация цепочки Tasks в бесконечном цикле (WinForms)
как правильно реализовать подобное? Когда код что-то типа такого - while (true) { Task.Factory.StartNew(Calculate).ContinueWith(task => UpdateUI(), ...
C# .NET nike00 18.07.2012 17:13
C#: Принятие сообщений от сервера в бесконечном цикле (Клиент-Сервер Чат)
Если кто то написал сообщение то это сообщение обрабатывает сервер и рассылает всех клиентам.. Но проблема в том что не понимаю как постоянно проверять сообщения от сервера.. Сейчас работает кто то отправил сообщение а мне оно приходит когда я отправляю что то Клиент: using System; using...
C# .NET tofers 04.04.2012 22:38
Windows XP: Перезагрузка в бесконечном цикле.
Доброго времени суток. Знакомый дал компьютер.В общем проблема такая. При загрузке компьютера он перезагружается после выбора системы.Безопасные режимы и прочее дают тот же результат,т.е перезагрузку.Пробовал загрузится с Live CD Ubuntu,но не получается,выходит надпись,что то типа debian kernel...
Windows XP Rexer 08.03.2011 10:38
Опции темы

Текущее время: 07:33. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.