c++线程类 linux,Linux下使用C++创建线程

Linux下使用C++创建线程,求助

本帖最后由 hello_world_2012 于 2012-08-04 20:57:34 编辑

请高手指点下:

代码如下:

#include 

#include 

#include 

using namespace std;

/*新创建1个线程要执行的操作

测试函数*/

void f1(void*)//

{

int i;

for(i=0;i<6;++i)

{

sleep(2);//usleep(),us

cout<

}

}

/***

定义的一个类,其中一个成员函数shout可以创建一个线程,每隔

一段时间打印age,name变量。

**/

class Person

{

private:

float height;

int age;

string name;

pthread_t   pid;

void* pshout(void*);

public:

Person(int n=19,string nm="zhang"):age(n),name(nm)

{

cout<

}

void shout();

pthread_t getPID();

};

/**类中线程函数实际操作**/

void* Person::pshout(void*)

{

for(int i=age;i<100;++i)

{

cout<

sleep(1);//1s

}//stopped when age is 100

}

/**类中创建线程的函数**/

void Person::shout()

{

pthread_t id=0;

int res=0;

res=pthread_create(&id,NULL,pshout,NULL);

/**这一句一直报错,编译错误,说是pshout类型转换无效*/

if(res!=0)

{

cerr<

exit(1);

}

pid=id;

}

pthread_t Person::getPID()

{

return pid;

}

int main()

{

pthread_t id;

int ret;

ret= pthread_create(&id,NULL,(void*)f1,NULL);

if(ret!=0)

{

cout<

exit(1);

}

for(int i=0;i<6;++i)

{

sleep(1.5);

cout<

}

pthread_join(id,NULL);

return 0;

}

疑问:每次编译时都报shout中的线程创建函数中对pshout的调用类型转换无效!!但是对于函数f1的调用为什么没有问题呢?

编译工具:Ubuntu下使用codeblocks,gcc编译器。

------解决方案--------------------

类中的线程函数应该写static

------解决方案--------------------

C++中member function会有一个“隐藏”的参数

Person* this

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值