C++笔记(一)

一.C++延时与暂停

windows下:

#include<Windows.h>
...
Sleep(500);//500ms
...
system("pause");
...

Linux下:

#include<unistd.h>
...
sleep(0.5);//0.5s
...
pause();
...

二.多线程CMakeLists.txt配置

cmake_minimum_required(VERSION 3.10)
project(untitled2)
find_package(Threads REQUIRED)
set(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11 -pthread")

add_executable(main main.cpp)
target_link_libraries(main ${CMAKE_THREAD_LIBS_INIT})

三.多线程入门

参考:多线程入门

ps:线程初始化:

使用类对象(初始化线程,考虑运算符重载,std::thread t(task)中的task相当于task.operator()

std::thread t(task(i))中的task相当于task.operator()(i)

#include <iostream>
#include <thread>
class Task
{
public:
    void operator()(int i)
    {
        cout << i << endl;
    }
};

int main()
{
    
    for (uint8_t i = 0; i < 4; i++)
    {
        Task task;
        thread t(task, i);//等价于thread t(task(i))
        t.detach(); 
    }
}

注意:把函数对象传入std::thread的构造函数时,要注意一个C++的语法解析错误(C++'s most vexing parse)。向std::thread的构造函数中传入的是一个临时变量,而不是命名变量就会出现语法解析错误。如下代码:

std::thread t(Task(),i);

这里相当于声明了一个函数t,其返回类型为thread,而不是启动了一个新的线程。可以使用新的初始化语法避免这种情况:

std::thread t{Task(),i};
//或者
std::thread t((Task()),i);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值