一.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);