C++ 学习笔记

std::thread

线程有两个状态joinable 和detached:

  1. joinable 表示线程处于活动状态
  2. detached 表示线程独立运行 ,但是程序结束时,同程序退出。

实例程序

#include<iostream>
#include<time.h>
#include <thread>
#include <unistd.h>
#include<sys/time.h>
using namespace std;
class MCLtest {
public:
	int a;
public:
	MCLtest() {
		a = 1;
	}
};
int main(void) {
	int i = 0;
	std::thread t([&]{
		i++;
		while (1)
		{
			printf("1\n");
			sleep(1);
		}
	}
	);
	if(t.joinable()){
		printf("joinable\n");
		t.detach();
	}
	// t.join();
	sleep(100);
	return 0;
}

注意事项 当类成员函数使用thread 线程来跑一个类成员函数传递的第一个参数为this 指针。

实例代码

void ActionController::StartLooper() {
	...............
}
void ActionController::Run() {
	.............
	std::thread looper{&ActionController::StartLooper, this};
	looper.join();
	..............
}

std::lock_guard

就是一个把封装了的锁,创建是上锁,销毁时解锁。

实例代码

#include <thread>
#include <mutex>
 
int g_i = 0;
std::mutex g_i_mutex;  // protects g_i
 
void safe_increment()
{
    std::lock_guard<std::mutex> lock(g_i_mutex);
    ++g_i;
 
    // g_i_mutex is automatically released when lock
    // goes out of scope
}
 
int main()
{
    std::thread t1(safe_increment);
    std::thread t2(safe_increment);
 
    t1.join();
    t2.join();
}

&

在函数名称前使用& 表示返回值为引用类型。

未完待续。。。。。。。

不知名的语法

// Unsigned int N 表示使用的数据类型,char 表示传入指针的类型,&str 表示传入的指针。N为计算的长度
template <unsigned int N> int printlen(const char(&str)[N]){
    return N;
}

std::string mcl = mps_string("Hello World");
std::cout << mcl << std::endl;
返回结果:
12


https://my.oschina.net/yangcol/blog/123433
https://en.cppreference.com/w/cpp/thread/thread/joinable

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值