C++|类内子线程计时器的实现用于超时后更改状态

文章介绍了一种在C++11中使用多线程和计时器来实现超时功能的方法。通过创建一个子线程运行计时器,当超过设定时间(例如3秒)后,改变状态或发送信号。代码示例中包含了类的定义和实现,包括启动计时器的函数以及超时检查的循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:C++多线程类Thread(C++11)
想实现一个超时更改当前状态的功能,思路是使用子线程开一个计时器,添加标志位如果超时发送信号或者回调函数改变状态。查了很多资料,没有现成可用的,大多在主函数里调用的,故此记录,如有错误评论指正。另有关回调函数的实现博主有写另一篇博客,可以搜回调函数自行查看。
稍微写了一个demo,整体结构如下:
在这里插入图片描述
主函数没有什么参考意义:

// ThreadTimer.cpp : Defines the entry point for the console application.
#include <iostream>
#include <iostream>
#include <mutex>
#include "ThreadTimerClass.h"
using namespace std;

int main()
{
	ThreadTimerClass a;
	system("pause");
    return 0;
}

实现类头文件,可以根据需求更改,这里只是核心代码没有附加任何功能:

#pragma once
#include <iostream>
#include <thread>
#include <mutex>

class ThreadTimerClass
{
public:
	ThreadTimerClass();
	~ThreadTimerClass();

	// 超时提示
	//void overTime();
	bool is_timer_;
	clock_t start_time_;	// 开始时间
	//std::mutex mt;	// 如果操作了同一个变量需要加锁
	// 计时器 超时提示断开相机连接
	void Timer();
	void start() {
		std::thread TimerThread(&ThreadTimerClass::Timer, this);
		TimerThread.detach();
	}
};


实现类cpp:

#include "ThreadTimerClass.h"


ThreadTimerClass::ThreadTimerClass()
{
	// 需要触发定时器的时候设置这两个变量
	is_timer_ = true;
	start_time_ = clock();
	start();	// 线程开始的位置也可自定义修改
}


ThreadTimerClass::~ThreadTimerClass()
{
}

void ThreadTimerClass::Timer()
{
	//mt.lock();
	while (1)
	{
		if (is_timer_)
		{
			clock_t end_time = clock();
			if ((double)(end_time - start_time_) / CLOCKS_PER_SEC > 3)	// 超过三秒超时
			{
				is_timer_ = false;
				std::cout << "计时结束" << std::endl;
				//emit SignalOverTime(); // 是用的qt发送信号出去 可根据需求自由更改
			}
		}
		else
		{
			std::this_thread::sleep_for(std::chrono::milliseconds(1000 * 5));
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇树谦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值