方式一:使用this指针
方式二:直接传递。
实例:
“paraData.h”
#include <string>
#include <stdio.h>
class paraData
{
public:
paraData()
: m_strData("test abc!"),
m_iData(5)
{}
~paraData(){}
void show()
{
printf("str:%s\n", m_strData.c_str());
printf("int:%d\n", m_iData);
}
private:
std::string m_strData;
int m_iData;
};
testThread.h:
#include "paraData.h"
#include <pthread.h>
class testThread
{
public:
testThread(){}
~testThread(){}
void Run();
static void* testPrint(void*);
void show();
private:
pthread_t m_pid;
paraData m_pData;
};
testThread.cpp:
#include "testThread.h"
void* testPrint(void* para)
{
printf("cccccc\n");
return 0;
}
void testThread::Run()
{
int ret = 0;
//ret = pthread_create(&m_pid, NULL, testPrint, this);
ret = pthread_create(&m_pid, NULL, testPrint, (void*)&m_pData);
if(ret == -1)
{
printf("create occur error\n");
}
pthread_join(m_pid, NULL);
}
void* testThread::testPrint(void* arg)
{
paraData* pdata = (paraData*) arg;
pdata->show();
//testThread* pthis = (testThread*) arg;
//pthis->show();
return 0;
}
void testThread::show()
{
m_pData.show();
}
main.cpp
#include "testThread.h"
int main()
{
testThread tt;
tt.Run();
return 0;
}
注:pthread_create的第三个参数,如果有全局函数和类成员函数重名(testPrint),默认调用类成员函数。