#include <thread>
#include <atomic>
class Task {
public:
Task(){
cnt_thread.store(0);
exit_workThread.store(false);
std::thread th(&Task::execute, this, "Sample Task");
th.detach();
}
~Task(){
exit_workThread.store(true);
while (cnt_thread);
}
void execute(std::string command) {
cnt_thread++;
int i = 0;
while(1)
{
if (exit_workThread)
break;
std::cout<<command<<" :: "<<i<<std::endl;
this_thread::sleep_for(std::chrono::seconds(1));
i++
}
cnt_thread--;
}
private:
std::atomic<int> cnt_thread;
std::atomic<bool> exit_workThread;
};
int main() {
Task * taskPtr = new Task();
getchar();
delete taskPtr;
return 0;
}
由于静态函数不依赖于任何类对象,所以我们可以直接将静态成员函数作为线程启动函数,而不必传递对象指针。
#include <thread>
class Task {
public:
static void test(std::string command) {
for(int i = 0; i < 5; i++) {
std::cout<<command<<" :: "<<i<<std::endl;
}
}
};
int main() {
// Create a thread using static member function
std::thread th(&Task::test, "Task");
th.join();
return 0;
}
// 输出如下:
Task :: 0
Task :: 1
Task :: 2
Task :: 3
Task :: 4
参考链接
https://thispointer.com/c11-start-thread-by-member-function-with-arguments/