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

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

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

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

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

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

Добавлено через 3 минуты
Может быть есть какой-либо аналог DoEvents как в VB6.0
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2015, 20:17
Ответы с готовыми решениями:

как создать условно бесконечный цикл
Добрый день. Подскажите как создать условно бесконечный цикл, который будет...

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

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

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

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

1
Dreamer_0x01
258 / 85 / 30
Регистрация: 29.10.2015
Сообщений: 192
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2015, 00:33

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

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

Почему цикл на при 1 уходит в бесконечный цикл?
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h>...


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

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

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