linux 类成员函数 线程函数 arg,在linux c++类中的成员函数里创建多线程要注意的地方(转)...

如何在linux 下c++中类的成员函数中创建多线程

linux系统中线程程序库是POSIX pthread。POSIX pthread它是一个c的库,用C语言进行多线程编程我这里就不多说了,网上的例子很多。但是如何在C++的类中实现多线程编程呢?如果套用C语言中创建多线程的方式,在编译的时候会出现...does not match `void*(*)(void*)..这样的错误。出现这种情况的原因是,编译器在处理C++和C文件上是不同的,也就是说C++和C语言里边指针函数不等价。解决这种错误的方法

有两种:

1、不要将线程函数定义为类的成员函数,但是在类的成员函数里边调用它。

例如:

[test.h]

#ifndef TEST_H

#define TEST_H

class test

{

public:

test();

~test();

private:

void createThread();

};

#endif

[test.cpp]

test::test()

{}

test::~test()

{}

void *threadFunction()

{

printf("This is a thread");

for(;;);

}

void test::createThread()

{

pthread_t threadID;

pthread_create(&threadID, NULL, threadFunction, NULL);

}

[main.cpp]

#inlcude "test.h"

int main()

{

test t;

t.createThead();

for(;;);

return 0;

}

2、将线程函数作为类的成员函数,那么必须声明改线程函数为静态的函数,并且该线程函数所引用的其他成员函数也必须是静态的,如果要使用类的成员变量,则必须在创建线程的时候通过void *指针进行传递。

例如:

【test.h】

#ifndef TEST_H

#define TEST_H

class test

{

public:

test();

~test();

private:

int p;

static void *threadFction(void *arg);

static void sayHello(int r);

void createThread();

};

#endif

[test.cpp]

test::test()

{}

test::~test()

{}

void *test::threadFunction(void *arg)

{

int m = *(int *)arg;

sayHello(m);

for(;;);

}

void sayHello(int r)

{

printf("Hello world %d!/n", r);

}

void test::createThread()

{

pthread_t threadID;

pthread_create(&threadID, NULL, threadFunction, NULL);

}

[main.cpp]

#inlcude "test.h"

int main()

{

test t;

t.createThead();

for(;;);

return 0;

}

这个原文实在是不知道在哪,我也是看别人转载的博客看到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>