您的位置:首页 > 其它

类的成员变量作为pthread_create的参数

2015-09-22 17:23 204 查看
方式一:使用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),默认调用类成员函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: