170 похожих чатов

Всем привет! Подскажите, пожалуйста, как организовать (в vs2015) выполнение определенного кода

через заданные промежутки времени?

27 ответов

15 просмотров

Цикл, в нём измерение времени, и вызов.

#include <future> #include <chrono> #include <thread> int main() { using namespace std::chrono_literals; auto period = 2s; auto times = 2; auto f = std::async(std::launch::async, [period, times] mutable { for( ;times; --times) { auto awaik = std::chrono::high_resolution_clock::now() + period; // doing something std::this_thread::sleep_for(1s); std::this_thread::sleep_until(awaik); } }); f.get(); }

Anton- Автор вопроса
Anatoly Shirokov
#include <future> #include <chrono> #include <thre...

А зачем std::this_thread::sleep_for(1s);? вроде бы нужно только std::this_thread::sleep_until(awaik);

Anton
А зачем std::this_thread::sleep_for(1s);?...

показать видимость деятельности, а так // doing something

Anton- Автор вопроса
Anatoly Shirokov
#include <future> #include <chrono> #include <thre...

Здравствуйте! Сделал, как Вы посоветовали, но почему-то выполнение основной проги начинается только после завершения доп.потока...

Anton
да

Логично, потому что f.get() – блокирующий вызов

Anton
а как надо?

Ну вызови его после основного кода

Anton- Автор вопроса
Liber Azerate
Ну вызови его после основного кода

тогда он запуститься только после завершения основного кода...

Anton- Автор вопроса
Liber Azerate
Нет

только проверил

Anton
только проверил

Поиграйся с этим, подумай: #include <iostream> #include <thread> #include <future> #include <chrono> int main(int argc, char *argv[]) { using namespace std::chrono_literals; auto f = std::async(std::launch::async, [](){ std::cout << "Hello, async\n"; }); std::this_thread::sleep_for(1s); std::cout << "Hello, main\n"; f.get(); }

Danya🔥
Наверное sleep надо было а лямбду

Не, почитай тред. Человек мне говорил, мол, если вызвать get() после кода мейна, то асинк только тогда исполняться начнёт

Serhii Herashchenko
Ну это если лаунч::деферред

Ну а у нас ни в коем случае не так

Liber Azerate
Не, почитай тред. Человек мне говорил, мол, если в...

Такое возможно, если политику не передавать, то в некоторых имплементациях там по умолчанию там дефферед

Danya🔥
Такое возможно, если политику не передавать, то в ...

Да даже если передавать асинк политику возможно

Anton- Автор вопроса
Liber Azerate
Поиграйся с этим, подумай: #include <iostream> #in...

Лучше объясню, что нужно, а то непонятки пошли. В main крутится основной код, а в доп.поток я хотел вынести считывание по таймеру данных с юсб-железки

Anton- Автор вопроса
Liber Azerate
И?

в твоем примере где должен быть основной код? если до f.get(); доп.поток не запустится, а после запуска будет ожидать его завершения или я что-то не понимаю?

Anton
в твоем примере где должен быть основной код? если...

Основной код – это и есть вывод в мейне

Anton- Автор вопроса
Liber Azerate
Да, ты не понимаешь. Запусти этот код.

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

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта