Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Задачи выполнил, ушёл
27 / 29 / 7
Регистрация: 16.10.2015
Сообщений: 345
1

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор?

22.11.2015, 20:17. Просмотров 2282. Ответов 1
Метки нет (Все метки)


Допустим есть цикл:
C++
1
2
3
4
while (1)
{
    ...
}
Как сделать так, чтобы бесконечный цикл не грузил процессор.
Избавиться от бесконечного цикла не предлагать, нужно именно с ним)

И ещё вопрос: чем может помочь Sleep(0) ?

Добавлено через 8 минут
Я понимаю что так программы не пишутся, но нужно именно в таком виде)

Добавлено через 3 минуты
Может быть есть какой-либо аналог DoEvents как в VB6.0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2015, 20:17
Ответы с готовыми решениями:

Как реализовать бесконечный цикл?
Как реализовать вот такой бессконечный цикл суммы? \sum_{n=0}^{\infty } Я лишь придумал чтоб...

Как правильно реализовать бесконечный цикл?
Господа, такой вопрос. Я совсем ещё нуб в шарпе, да и в программировании собственно тоже )) ...

Как реализовать бесконечный цикл в потоке?
Не получается реализовать бесконечный цикл в потоке, который играет мелодию раз в секунду. Вот...

Есть бесконечный цикл в программе и она поэтому занимает процессор, как это исправить?
НАписал себе напоминалку, а она жрёт процессор (~~ 45%); код упростил для понятности #include...

1
259 / 86 / 30
Регистрация: 29.10.2015
Сообщений: 196
24.11.2015, 00:33 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MSG_Pushing()
{
            MSG msg;
            while(::PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)){
                if(msg.message == WM_QUIT) return;
                TranslateMessage (&msg);
                DispatchMessage (&msg);
            }
}
 
.....
 
while(1)
{
MSG_Pushing();//"прокачали очередь сообщений"
 
if(cond)break;//вот так выходим
 
//А здесь можно запустить еще и WaitForSingleObject таймера, если хотите побольше времени отдавать другим потокам - но это уже от задачи зависит.. 
}
Добавлено через 3 минуты
чем может помочь Sleep(0)
Формально это указание, что в данном месте есть готовность отдать квант времени другому потоку.

Я, кстати, написал на основе вышеупомянутой функции свой Sleep, который как раз использую там, где и ждать нужно, и в этот момент не блокировать этим ожиданием работу остальных потоков. Выглядит так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define SLEEP2TM 100
void Sleep2(unsigned int msek)
{
    HANDLE hTimer = NULL;
    LARGE_INTEGER liDueTime;
    liDueTime.QuadPart=-10000 * SLEEP2TM;
 
    hTimer = CreateWaitableTimer(NULL, FALSE, "timersleep");
    SetWaitableTimer(hTimer, &liDueTime, SLEEP2TM, NULL, NULL, 0);
    while(msek)
    {
        WaitForSingleObject(hTimer, INFINITE);
        MSG_Pushing();
        if(msek>=SLEEP2TM)msek-=SLEEP2TM;
        else msek = 0;
        if(StopCondition())break;
    }
 
    CancelWaitableTimer(hTimer);
    CloseHandle(hTimer);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2015, 00:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как реализовать бесконечный цикл, без бесконечной работы кампухтера?
Ребят, у меня убывающий числовой ряд (то есть каждый последующий член меньше предыдущего) arcctg =...

Цикл: Как реализовать цикл или что-то другое, чтобы возвращаться в окно редактирования с помощью букв "Y" и"N".
Как реализовать цикл или что-то другое чтобы не возвращаться в окно редактирования не с помощью...

Как сделать, чтобы при вводе в меню (через switch) букв, не выпадал бесконечный цикл
Помогите, пожалуйста! Когда ввожу переменную не типа int, а допустим слово, то происходит...

Цикл do/while. Страница в браузере, уходит в бесконечный цикл и ничего не выводит.
Помогите, страница в браузере, как я понял, уходит в бесконечный цикл и ничего не выводит. Если...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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