#include <iostream>
#include "bv.h"
#include <ctime>
int main(int argc, char *argv[])
{
int t_on = std::clock();
BV tmp;
int command = -1;
std::cout<<"1 - Run\n";
std::cout<<"2 - Stop\n";
std::cout<<"3 - Cancel\n";
while (command != 0)
{
std::cin>>command;
switch ( command )
{
case 1: if (tmp.run(20)) std::cout<<"Started\n"; break;
case 2: tmp.stop(); break;
case 3: tmp.cancel(); break;
}
}
int t_off = std::clock();
std::cout << "Function completed in "
<< (static_cast<float>(t_off - t_on))/CLOCKS_PER_SEC
<< " seconds" << std::endl;
return 0;
}
[c++] Таймер в линукс
p.s. система Debian
и что вызывается до него (может какой нить sleep() ?) и после.
Цитата: Odissey_
приведи код использования std::clock(),
и что вызывается до него (может какой нить sleep() ?) и после.
и что вызывается до него (может какой нить sleep() ?) и после.
Код:
И в первом и во втором случае std::clock() возвращает 0
Логичнее было бы так -
Код:
while (command != 0)
{
std::cin>>command;
switch ( command )
{
case 1:
{
int t_on = std::clock();
//if (tmp.run(20)) std::cout<<"Started\n"; break;
for (float i=0; i < 100000; i+=0.01);
int t_off = std::clock();
std::cout << "Function completed in "
<< (static_cast<double>(t_off - t_on))/CLOCKS_PER_SEC
<< " seconds" << std::endl;
} break;
case 2: tmp.stop(); break;
case 3: tmp.cancel(); break;
}
}
{
std::cin>>command;
switch ( command )
{
case 1:
{
int t_on = std::clock();
//if (tmp.run(20)) std::cout<<"Started\n"; break;
for (float i=0; i < 100000; i+=0.01);
int t_off = std::clock();
std::cout << "Function completed in "
<< (static_cast<double>(t_off - t_on))/CLOCKS_PER_SEC
<< " seconds" << std::endl;
} break;
case 2: tmp.stop(); break;
case 3: tmp.cancel(); break;
}
}
Незнаю что у тебя там tmp.run(20) делает поэтому для примера вставил цикл.
void do_timer (struct pt_regs *regs)
{
jiffies_64++;
update_process_times(user_mode(regs));
update_times();
}
Макрос user_mode() просматривает состояние регистров процессора, regs, и возвращает значение 1, если прерывание возникло в пространстве пользователя, и значение 0- если в пространсте ядра. Кажись это можно приспособить в прикладной программе. Поправте если не прав :)
[/LEFT]
а setitimer чем не устраивает?