Оптимальный бесконечный цикл C ++ с интервалом - PullRequest
0 голосов
/ 18 мая 2018

У меня есть вопрос о правильности моего кода.
Я делаю приложение, которое запускается как демон, оно выполняет некоторый код с интервалом, код выглядит так:

#include <iostream>
#include <thread>

using namespace std;

int main() {
    thread([=]() {
        while (true) {
            try {
                cout << "log" << endl;
                this_thread::sleep_for(chrono::milliseconds(3000));
            }
            catch (...) {
                cout << "Some errors here :/" << endl;
            }
        }
    }).detach();
    while (true);
}

IЯ обеспокоен тем, что этот код является оптимальным, потому что в top я вижу, что эта программа использует около 80% процессорного времени.
Можно ли что-то исправить?

мой код эквивалентен этому: https://stackoverflow.com/a/21058232/5334833?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Похоже, что while(true); - это UB.

Возможно, вы просто избавитесь от потока BTW:

int main() {
    while (true) {
        try {
            std::cout << "log" << std::endl;
            std::this_thread::sleep_for(std::chrono::milliseconds(3000));
        }
        catch (...) {
            std::cout << "Some errors here :/" << std::endl;
        }
    }
}
0 голосов
/ 18 мая 2018

while(true); приведет к тому, что ваш основной поток будет непрерывно зацикливаться и использовать 100% одного ЦП.

Если вы работаете в Linux, вы можете просто вызвать pause(), что приостановит ваш основной поток досигнал приходит.

Поскольку вы на самом деле не используете свой основной поток, есть ли причина, по которой вы вообще создаете новый поток?Можете ли вы просто выполнять свою работу в основной теме?

...