
先看代码
#include <iostream>
#include <pthread.h>
#include "unistd.h"
using namespace std;
class A
{
private:
/* data */
public:
A();
~A();
void Start();
static void* StartThread(void *lp);
bool bStart;
};
A::A(/* args */)
{
}
A::~A()
{
}
void A::Start()
{
pthread_t t;
int err = pthread_create(&t, NULL, StartThread, (void *)this);
if (err != 0)
std::cout << "can't create thread" << std::endl;
}
void* A::StartThread(void *lp)
{
A *a= (A *)lp;
a->bStart = true;
while (a->bStart)
{
std::cout << a->bStart << std::endl;
sleep(1);//延时1s
}
std::cout<<"over"<<std::endl;
return ((void *)0);
}
int main()
{
A a;
a.Start();
sleep(10);
a.bStart=false;
sleep(3);
return 0;
}再看输出:
1
1
1
1
1
1
1
1
1
1
over这个例子说明:
(1)线程传参如果是这个类对象,则为引用传递,你在外部其他地方修改类的成员变量会影响到类静态函数中传递这个类对象,比如这个例子中bStart变量
(2)线程创建需要的函数是静态函数或者全局函数,如果您使用类的成员函数放到pthread_create中则会报错
(3)注意线程中传递参数时候传递参数的类型要对应。