Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
TitanX
Новичок
0 / 0 / 0
Регистрация: 11.06.2010
Сообщений: 6
17.08.2010, 19:16     Как разгрузить процессор при бесконечном цикле
  #1
Код C++
1
2
3
4
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
 while(1) {}; 
}
 Комментарий модератора Папа Карло
Используйте теги кода
AdAgent
Объявления
17.08.2010, 19:16
Monte-Cristo
Форумчанин
2782 / 1353 / 15
Регистрация: 07.03.2009
Сообщений: 4,447
17.08.2010, 19:45
  #2
Процессор, или чтоб gui отвис? Самый лучший способ - вынести бесконечный цикл в поток.
Можно просто выделять процессорное время используя Sleep(0). А вообще, самое рациональное, избегать бесконечных циклов вообще.
Sasha
Форумчанин
4212 / 1901 / 78
Регистрация: 05.06.2008
Сообщений: 5,723
Записей в блоге: 3
17.08.2010, 20:18
  #3
Цитата Сообщение от TitanX Посмотреть сообщение
Код C++
1
2
3
4
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
 while(1) {}; 
}
Используйте теги кода
Код C++
1
2
3
4
5
for (;;)
 
{
 
}
MikeSoft
Форумчанин
Эксперт C++
3737 / 1721 / 80
Регистрация: 21.11.2009
Сообщений: 2,542
17.08.2010, 20:44
  #4
Sasha, немножко не понял вашего совета. Поясните, какую вы видите разницу между while(1) и for(; ?
Оптимизатором будет предпринята операция по исключения проверок (ещё на этапе компиляции вы получите предупреждение "Unreachable code").

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

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

Темы потоков поднимались неоднократно... Например, можно посмотреть вот здесь: Ошибка при вызове CreateThread
TitanX
Новичок
0 / 0 / 0
Регистрация: 11.06.2010
Сообщений: 6
17.08.2010, 21:30  [ТС]
  #5
Спасибо. sleep(1) помогло.
iama
Нарушитель
1243 / 971 / 12
Регистрация: 30.07.2010
Сообщений: 5,299
17.08.2010, 21:35
  #6
Код C++
1
Application->ProcessMessages 
... или я не в тему?
ProstoMad
Форумчанин
44 / 34 / 2
Регистрация: 30.06.2010
Сообщений: 1,006
19.08.2010, 13:13
  #7
Как цикл в поток вывести?
MikeSoft
Форумчанин
Эксперт C++
3737 / 1721 / 80
Регистрация: 21.11.2009
Сообщений: 2,542
19.08.2010, 13:20
  #8
ProstoMad, чуть выше я давал ссылку... через неё можно выйти на нужную тему.
Посмотрите пост с примером создания потока: CreateThread
[XandeR]
Форумчанин
29 / 29 / 1
Регистрация: 18.03.2009
Сообщений: 380
Записей в блоге: 2
21.08.2010, 10:07     Как разгрузить процессор при бесконечном цикле
  #9
я избегал попадания программы в бесконечный цикл путем установки лимита итераций цикла, например
Код C++
1
2
3
4
5
6
7
while(Replace()){
    erCounter++;
    if (erCounter>200) {
        Aux->Error("Возникло прерывание из-за вероятности входа в бесконечный цикл");
        break;
    }
}
если конечно Вам требуется прерывание
Yandex
Объявления
21.08.2010, 10:07
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Ответов Автор Дата
C++ Builder Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле считает заново?
Занялся сабжем по проекту. IDE Builder 2010 1) Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле считает заново? 2) Будет ли выигрыш от принудительного...
C++ Builder 7 phtnr 02.08.2014 01:57
C++ Builder Как оформить в цикле работу с переменной
Как оформить в цикле работу с переменной х float f6; f6=((x1*n1+x2*n2+x3*n3+x4*n4+x5*n5+x6*n6+x7*n7+x8*n8+x9*n9+x10*n10)/q); Edit7->Text=FloatToStrF(f6, ffFixed, 5, 2);
C++ Builder 1 Ivan_12354 21.03.2014 05:49
C++ Builder Как записать в ini данные с формы в цикле?
Количество итераций не известно - вводится пользователем. Поэтому использую цикл по элементам формы. Только вот на 9й строчке компилятор выдаёт E2247 'TControl::Text' is not accessible. Хотя 10я...
C++ Builder 2 Kulgar 28.08.2013 09:58
C++ Builder Исключение в цикле
скажем так for ( int i = ToExt->Count - 1; i >= 0; i-- ) { if ( ! FindFirst( disk + ToExt->Strings, faAnyFile, sear ) ) { do { DeleteFile( disk + "\\" +...
C++ Builder 2 Ddv122 24.05.2012 21:12
C++ Builder БД Switch в цикле for
int i,g,G; Char F; for(i=0; i<Edit3->Text.Length(); i++) { F=Edit3->Text; } for(i=0; i<Edit3->Text.Length(); i++) { switch(F) {
C++ Builder и базы данных 2 Faust971 14.05.2012 04:50
C++ Builder Вопрос о цикле
Элеметарный вопрос однако. Допустим один батон запускат цикл. Как вторым батоном прервать цикл запущенный первым? Label и goto что ли?
C++ Builder 24 Flyer 05.09.2011 10:06
C++ Builder Вычисление в цикле
Здравствуйте. У меня в цикле производятся вычисления(около 3 минут). и при этом задействовано только 1 ядро(из 4) т.е. весь комп на 25%. Можно как нибудь задействовать все 4 ядра? Чтобы вычисления...
C++ Builder 8 mustcl 29.08.2011 15:44
C++ Builder О цикле
Хочу поговорить о функции Application->ProcessMessages() . for(int i=0;i<a;i++){ //code Application->ProcessMessages() ; } Используя ее, цикл как бы превращается в таймер. Может...
C++ Builder 2 NiTan 08.02.2010 12:07
Опции темы

Текущее время: 13:47. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.