спящий поток — получите разницу во времени в миллисекундах в переполнении стека

Я пытаюсь получить разницу во времени между двумя метками времени. Нить спит между двумя метками времени. но когда я получаю разницу, это не дает мне время, когда нить спала. Мой код ниже.

#include <iostream>
#include <locale>
#include <sys/time.h>
#include <cstdlib>
#include <unistd.h>

using namespace std;

int timeInMilli();

int main()
{
timeval t;
timeval t2;
gettimeofday(&t, NULL);
gettimeofday(&t2, NULL);

std::string buf(20, '\0');
std::strftime(&buf[0], buf.size(), "%H:%M:%S:", localtime(&t.tv_sec));

std::string hr  = buf.substr(0, 2);
std::string min = buf.substr(3, 2);
std::string sec = buf.substr(6, 2);

/*std::cout << hr  << '\n';
std::cout << min << '\n';
std::cout << std::atoi(sec.c_str()) << '\n';*/

int a = timeInMilli();
usleep(10);
int b = timeInMilli();

cout << b-a << endl;
}

int timeInMilli()
{
timeval t;
gettimeofday(&t, NULL);

string buf(20, '\0');
strftime(&buf[0], buf.size(), "%H:%M:%S:", localtime(&t.tv_sec));
string str_hr  = buf.substr(0, 2);
string str_min = buf.substr(3, 2);
string str_sec = buf.substr(6, 2);

int hr    = atoi(str_hr.c_str());
int min   = atoi(str_min.c_str());
int sec   = atoi(str_sec.c_str());
int milli = t.tv_usec/1000;

/*cout << hr    << endl;
cout << min   << endl;
cout << sec   << endl;
cout << milli << endl;*/

int timeInMilli = (((hr * 60) + min) * 60 + sec) * 1000 + milli;
return timeInMilli;
}

1

Решение

usleep(10);

означает, что вы останавливаетесь на 10 микросекунды а не 10 мс поскольку usleep работает с микросекундами. попробуй с

usleep(10000);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]