Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual C++

Войти
Регистрация
Восстановить пароль
 
noname664
Задачи выполнил, ушёл
23 / 23 / 2
Регистрация: 16.10.2015
Сообщений: 345
#1

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

22.11.2015, 20:17. Просмотров 394. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор? (Visual C++):

как создать условно бесконечный цикл - Visual C++
Добрый день. Подскажите как создать условно бесконечный цикл, который будет выполнять своё содержимое с интервалом 50...100мс(0,05...0,1с),...

Как реализовать бесконечный цикл в потоке? - Программирование Android
Не получается реализовать бесконечный цикл в потоке, который играет мелодию раз в секунду. Вот код: MediaPlayer player; Runnable...

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

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

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

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h> #include <string.h> int main() { int x=0, y=0,...

1
Dreamer_0x01
254 / 81 / 27
Регистрация: 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
Привет! Вот еще темы с ответами:

Как переделать программу, чтобы внешний цикл был repeat.until, а цикл for вложенным? Паскаль - Pascal ABC
const x = 0.29; var y, sv, sz, fact, st: real; i, j, zn: integer; begin sz := 0; writeln('cycles for and while');

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием... - Turbo Pascal
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать учесть особенности получения квадратного...

Как создать бесконечный цикл - C++
Не могу создать бесконечный цикл, для проверки символов вводимых пользователем. Нужно чтобы при вводе букв выдавалось ошибка, что можно...

Как остановить бесконечный цикл?! - Pascal
Написал программу, ошибся, и она запустила бесконечный цикл. На что нажать (на клавиатуре) что бы его остоновить? :(


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

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

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