Star_Tool: star::thread 可中断标志位的扩展std::thread

本文介绍了Star_Tool库中的C++线程类扩展,支持跨Windows和Linux的线程中断功能。类`star::thread`提供了中断、尝试中断和清除中断标志的方法,允许在不同线程间进行通信。此外,还引入了`this_thread`命名空间,提供与类实例同步的全局函数,方便在子线程中检测和处理中断。
摘要由CSDN通过智能技术生成

       大纲链接:

        Star_Tool:一个C++跨Windows和Linux的工具库_菜鸟小田的博客-CSDN博客

        在并发编程的学习中,我了解到由于C++没有对线程中断的标准支持,所以我扩写了该类并封装进了该star命名空间中。

        其中有部分交叉编译和编译扩展的相关方面知识,我会单独开一个编写思路指南,但当前博客主要为使用文档,就不赘述实现原理了,现在开始介绍相关公共接口:

class thread : public std::thread {
	public:
		template<typename Function, typename... Args>
		thread(Function&& function, Args&&... args);
		template<typename Function>
		thread(Function&& function);
		void interrupt();
		void interrupt(std::string msg);
        void try_interrepted()  noexcept(false);
        void clear();
}

这是基本类的扩展,由于是直接公告继承std::thread的,故大部分star::thread的接口可以直接使用,在此不赘述介绍了,主要介绍扩展的功能:

template<typename Function, typename... Args>
thread(Function&& function, Args&&... args);
template<typename Function>
thread(Function&& function);

        两个构造函数直接调用并直接传递给父类的std::thread的构造函数,意义与父类相同,更多详细可以参考std::thread的文档。

void interrupt();

        将线程中断,向这个线程发送中断标志,线程内的中断标志位被设置,线程可以被中断,当调用相关尝试中断操作时会抛出interrupt_except异常(详细见后续)

void interrupt(std::string msg);

        将线程中断,向这个线程发送中断标志,并将线程的中断信息设置为msg,线程内的中断标志位被设置,线程可以被中断,当调用相关尝试中断操作时会抛出类型为interrupt_except异常(详细见后续),异常中包含msg信息。

void try_interrepted()  noexcept(false);

        尝试中断,会检测线程是否被设置了中断标志,若线程被设置了中断标志,则会抛出类型为interrupt_except的异常,并在异常体内附带异常信息。

void clear();

        会清除中断标志并清除中断消息,当调用clear后再尝试调用try_interrepted后将不会触发异常。

        好的,关于star::thread类到此就介绍完毕了,但其相关操作并没有完毕,以为我们调用中断常常是在创建线程实例的线程调用中断,在子线程中尝试是否中断,但子线程由于是通过函数方式运行的,检测不到相关的中断标志,故我提出一套解决方案,在star中添加一个命名空间this_thread,在其中添加一系列全局函数,其标志位与类实例的标志位是同一个标志位(也就是相通的),这样就可以完成对子线程的控制。

        this_thread空间下函数如下:

namespace this_thread {
		void interrupt();
		void interrupt(std::string msg);
		void try_interrepted() noexcept(false);
		void clear();
}

        其功能与实例内的同名方法的功能是相同的,可以被类内函数当中全局函数调用,且其触发时机也是与类内函数相同的,在此不再赘述其功能。

        好的,其这个功能的相关外部接口介绍到此,其实现方法对我来讲还是有些复杂的,特别是实现类内函数和全局函数触发时机的相通性,所以我会后续开一个单独的链接来介绍实现方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值