Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12680
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 35
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-23 21:01
文章存档

2013年(10)

我的朋友

分类: LINUX

2013-08-06 15:19:50

如何在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;
}

阅读(1448) | 评论(0) | 转发(0) |
0

上一篇:epoll编程

下一篇:没有了

给主人留下些什么吧!~~