Форум программистов, компьютерный форум CyberForum.ru

Вызов функции с определенной частотой - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегруженная функция сравнения двух дат http://www.cyberforum.ru/cpp-beginners/thread922917.html
Как сократить функцию которая сравнивает две даты? Получилось кое-как, да и еще предупреждение показывает, что значение возвращается не при всех путях выполнения class CDate { public: explicit CDate(int day=1, int month=1, int year=2000); explicit CDate(const CDate &copy); bool operator<(const CDate &right);
C++ Задача на сообразительность На собеседовании был задан следующий вопрос. Дан псевдокод бесконечного цикла. int x; x=.... while(true) { x=.... printf("%d,"x); } какое значение или выражение нужно присвоить х, чтобы цикл все время выдавал 6,7,6,7....? http://www.cyberforum.ru/cpp-beginners/thread922898.html
«сохранение» консольной программы C++
Подскажите пожалуйста, каким образом можно сохранить консольную программу, так чтобы ее можно было передать к примеру моим друзьям у которых нет IDE и компиляторов? Желательно как это сделать в Эклипсе, на крайний случай - Qt или Visual studio. Спасибо.
Ошибка в вызове функции C++
Здравствуйте, помогите исправить ошибку в вызове функции. Привожу часть кода: int main(int argc, char *argv) { ShowCopyright(); // функция вывода прав копирайта if(argc == 1) // если не введена команда то выводим помощь { cout << "Введена неизвестная команда, прочти помощь или введи команду help" << endl; ShowHelp(); /// функция вывода помощи
C++ Определение чисто виртуальных функций в потомках http://www.cyberforum.ru/cpp-beginners/thread922861.html
Можно ли вместо определения чисто виртуальной функции в классе-потомке написать эту самую функцию без тела? Т.е. она как бы есть, но ее как бы нет, ибо конкретно этому классу она как таковая не нужна, но и абстрактным он не является...
C++ Как обычную переменную на время сделать константой? Как обычную переменную на время сделать константой? подробнее

Показать сообщение отдельно
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
14.07.2013, 15:24     Вызов функции с определенной частотой
Через фичи C++11:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <chrono>
#include <thread>
 
using namespace std;
 
enum {
    FREQ_HZ = 100,
    INV_FREQ_HZ = 1000000 / FREQ_HZ
};
 
void func() {
    std::cout << "*";
}
 
int main()
{
    for ( ; ; ) {
        chrono::high_resolution_clock::time_point t = chrono::high_resolution_clock::now();
 
        func();
 
        int us = chrono::duration_cast< chrono::microseconds >( chrono::high_resolution_clock::now() - t ).count();
        if ( us < INV_FREQ_HZ ) {
            this_thread::sleep_for( chrono::microseconds( INV_FREQ_HZ - us ) );
        }
    }
 
    return 0;
}
Правда в Windows, GCC не даёт мне микросекунды через high_resolution_clock ...

Добавлено через 43 минуты
Зато boost даёт нам такую точность...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#define BOOST_THREAD_USE_LIB
 
#include <boost/chrono.hpp>
#include <boost/thread.hpp>
#include <iostream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
enum {
    FREQ_HZ = 1000,
    INV_FREQ_HZ = 1000000 / FREQ_HZ
};
 
void dummy() {
    boost::this_thread::sleep( boost::posix_time::microseconds( rand() % 2000 + 1000 ) );
}
 
int main()
{
    for ( ; ; ) {
        boost::chrono::high_resolution_clock::time_point t = boost::chrono::high_resolution_clock::now();
 
        dummy();
 
        int us = boost::chrono::duration_cast< boost::chrono::microseconds >( boost::chrono::high_resolution_clock::now() - t ).count();
        cout << us;
 
        if ( us < INV_FREQ_HZ ) {
            boost::this_thread::sleep( boost::posix_time::microseconds( INV_FREQ_HZ - us ) );
            cout << ", " << INV_FREQ_HZ - us;
        }
        cout << endl;
    }
 
    return 0;
}
 
Текущее время: 01:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru