c++ - 如何制作一个永远运行的线程?
问题描述
我有一个任务,我应该在不使用任何 CPU 或操作系统时钟功能的情况下测量数据包之间的一些延迟(这可能听起来很愚蠢,但在我必须制作的虚拟网络中是有意义的)并且决定编写我自己的时钟类,类似于我们使用我们知道其频率的内部振荡器使用微控制器测量时间的方式。
我开始编写一个Clock
小类,我将创建一个类的私有成员,TCP
以简单地扮演一个内部时钟的角色,size_t period
每毫秒滴答一次。没有什么花哨的,时间测量的准确性并不重要。
#include <iostream>
#include <cstdio>
#include <thread>
class Clock{
public:
Clock();
~Clock();
Clock(const size_t& period);
size_t getElapsedTime();
void run();
private:
size_t period;
size_t elapsedTime;
bool running;
protected:
};
Clock::Clock() :period(1000000), elapsedTime(0), running(true)
{
std::thread t(run);
t.detach();
}
Clock::Clock(const size_t& period) : elapsedTime(0), running(true) {
this->period = period;
}
void Clock::run() {
while (this->running){
for ( int i = 0; i < period; ++i){;}
++elapsedTime;
}
}
Clock::~Clock(){
}
std::size_t Clock::getElapsedTime() {
return elapsedTime;
}
int main(){
Clock clk(1000000);
return 0;
}
我遇到的问题是我似乎无法让这个线程工作。我想让它不停地运行,直到我破坏Clock
对象并且当大程序中的某个事件发生时,我想调用getElapsedTime()
并查看触发该事件需要多长时间。
写作时std::thread t(run);
我得到一个错误说error: invalid use of non-static member function 'void Clock::run()'
,但使该方法static
产生更多错误。
解决方案
您也需要将 传递Clock
给线程。
std::thread t(&Clock::run, this);
推荐阅读
- python - mysql.connector.errors.ProgrammingError: 1064 (42000) - 创建本地 NVD 镜像
- r - R中的data.frame到json
- javascript - 如何在模板文字 js 表达式中选择 $(this)?
- react-native - 如何在选项卡视图中放置滚动到多个平面列表上方的标题
- google-sheets - 如何在范围内的谷歌表格中生成随机双数?
- python - 随机选择一个列表,然后从所述列表中选择一个项目,然后打印它,但也打印它所在的列表
- azure - Azure 流分析 - 加入两个流式源
- node.js - Node.JS 中的异步函数调用 SQL Server 无法正常工作
- c - 带有for循环和if语句错误的斐波那契数字代码
- java - 将 DynamoDB 文档解析为 Map
在爪哇