本文章记录c++创建线程,启动线程和结束线程的代码。
需要注意,编译时需要添加-lpthread依赖。
代码:
ThreadTest.h
cpp
#ifndef TEST_THREAD_TEST_H
#define TEST_THREAD_TEST_H
#include <thread>
#include <mutex>
class ThreadTest
{
public:
void start();
void stop();
void threadLoop(int a);
volatile bool started = false;
private:
std::thread *mThread;
std::mutex mMutex;
};
static void threadRun(ThreadTest* threadTest);
#endif // TEST_THREAD_TEST_H
ThreadTest.cpp
cpp
#include "ThreadTest.h"
#include "iostream"
// thread entrance.
static void threadRun(ThreadTest* threadTest){
printf("thread start!\n");
int a = 0;
while (threadTest->started)
{
a++;
threadTest->threadLoop(a);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
printf("threadRun method exit!\n");
};
// start thread.
void ThreadTest::start(){
mMutex.lock();
if(started){
mMutex.unlock();
return;
}
started = true;
printf("thread starting!\n");
mThread = new std::thread(threadRun, this);
printf("thread started!\n");
mMutex.unlock();
};
// stop thread.
void ThreadTest::stop(){
mMutex.lock();
if(!started) {
mMutex.unlock();
return;
}
if(started && mThread != nullptr && mThread->joinable()) {
started = false;
mThread->join();
}
printf("thread stopped!\n");
mMutex.unlock();
};
// run in thread.
void ThreadTest::threadLoop(int a){
printf("threadLoop, a:%d!\n", a);
};
Test.cpp
cpp
#include "ThreadTest.h"
#include "iostream"
// thread entrance.
static void threadRun(ThreadTest* threadTest){
printf("thread method called!\n");
int a = 0;
while (threadTest->started)
{
a++;
threadTest->threadLoop(a);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
printf("threadRun method exit!\n");
};
// start thread.
void ThreadTest::start(){
mMutex.lock();
if(started){
mMutex.unlock();
return;
}
started = true;
printf("thread starting!\n");
mThread = new std::thread(threadRun, this);
printf("thread started!\n");
mMutex.unlock();
};
// stop thread.
void ThreadTest::stop(){
mMutex.lock();
if(!started) {
mMutex.unlock();
return;
}
if(started && mThread != nullptr && mThread->joinable()) {
started = false;
mThread->join();
}
printf("thread stopped!\n");
mMutex.unlock();
};
// run in thread.
void ThreadTest::threadLoop(int a){
printf("threadLoop, a:%d!\n", a);
};
执行:
cpp
导入IDE执行,或用g++:
g++ -o test Test.cpp -I ThreadTest.h ThreadTest.cpp -lpthread
./test
输出
cpp
hello world!
thread starting!
thread started!
thread method called!
threadLoop, a:1!
threadLoop, a:2!
threadLoop, a:3!
threadRun method exit!
thread stopped!
-----------------
thread starting!
thread method called!
threadLoop, a:1!
thread started!
threadLoop, a:2!
threadLoop, a:3!
threadRun method exit!
thread stopped!
thread starting!
thread method called!
threadLoop, a:1!
thread started!
threadRun method exit!
thread stopped!
thread starting!
thread started!
thread method called!
threadRun method exit!
thread stopped!
thread starting!
thread method called!
threadLoop, a:1!
thread started!
threadRun method exit!
thread stopped!
thread starting!
thread started!
thread method called!
threadRun method exit!
thread stopped!
thread starting!
thread method called!
threadLoop, a:1!
thread started!
threadRun method exit!
thread stopped!
hello world end!