C++筆記(一)
阿新 • • 發佈:2019-02-02
一.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);