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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zram
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 18
#1

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

14.07.2013, 14:08. Просмотров 681. Ответов 3
Метки нет (Все метки)

Всем привет, бьюсь над задачей: необходимо вызывать функцию с определенной частотой например 30КГц. Кто сталкивался с подобной задачей?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 14:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов функции с определенной частотой (C++):

Вызов функции, определенной как структура - C++
Программа аварийно завершается при запуске Методом комментирования строк пришел к выводу, что все это из-за строки d.vec = s(x).vec; ...

Нажатие определенной клавиши на клавиатуре = Запуск определенной функции - C++
Здравствуйте. У меня такой вопрос: как при нажатии, к примеру, клавиши "1" на клавиатуре запустить нужную мне функцию (Окно с меню...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке - C++
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include <iostream> using std::cout; void f(const int &ref){...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) - C++
#include <iostream> using namespace std; template <class T1> class mas { public: T1 n; T1 a; void input() ...

Посещение потоком определенной функции - C++
Можно ли как то узнать, какие именно потоки прошли через заданную функцию? студия 2012.

Использование переменной, определенной в 1 функции, в другой. - C++
Всем привет! Прошу помощи: есть 2 функции: void 1{...} и void 2{...}. Ну и main(). В 1 функции определена некая переменная, которая...

3
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
14.07.2013, 15:24 #2
Через фичи 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;
}
1
Убежденный
Ушел с форума
Эксперт С++
15701 / 7211 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
14.07.2013, 15:38 #3
Цитата Сообщение от zram Посмотреть сообщение
Всем привет, бьюсь над задачей: необходимо вызывать функцию с определенной частотой например 30КГц. Кто сталкивался с подобной задачей?
Эта задача полностью решается только в системах реального времени.
Windows, например, таковой не является. Во время работы функции может
произойти какое-нибудь внешнее событие, - прерывание, например, - в
результате которого выполнение потока будет приостановлено на
неопределенное время.
0
zram
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 18
14.07.2013, 17:23  [ТС] #4
Цитата Сообщение от Убежденный Посмотреть сообщение
Эта задача полностью решается только в системах реального времени.
Windows, например, таковой не является. Во время работы функции может
произойти какое-нибудь внешнее событие, - прерывание, например, - в
результате которого выполнение потока будет приостановлено на
неопределенное время.

да, я это учитываю прерывания допустимы . спасибо
lazybiz, то что надо!
0
14.07.2013, 17:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2013, 17:23
Привет! Вот еще темы с ответами:

Выключение и включение определенной функции в коде - C++
Здравствуйте. Помогите с решением данной проблемы. Существует функция которая выдает некое значение. И находится в классе, в...

Вызов функции в параметре другой функции - C++
программа: #include &lt;iostream&gt; using namespace std; struct E { E() {} }; void f(const E&amp; e)

Вызов функции в возврате значения функции - C++
Есть функция: int function1(a) { ...... return function2(function1(b),function1(c)); } Как работает такая хитрая система?

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


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

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

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