博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在linux c++类中的成员函数里创建多线程要注意的地方
阅读量:6245 次
发布时间:2019-06-22

本文共 1386 字,大约阅读时间需要 4 分钟。

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

}

转载地址:http://nooia.baihongyu.com/

你可能感兴趣的文章
基础才是重中之重~理解内存中的栈和堆
查看>>
js错误问题 The operation is insecure.
查看>>
第四章 表达式
查看>>
Python数值计算:一 使用Pylab绘图(3)
查看>>
python爬虫知识点总结(十八)Scrapy框架基本使用
查看>>
限制textarea的字数(包括复制粘贴)
查看>>
ArcGIS Server中的各种服务
查看>>
HIVE: Transform应用实例
查看>>
Some examples about how to write anonymous method and lambda expression
查看>>
linux下可以禁用的一些服务
查看>>
aria2的下载配置
查看>>
C++扬帆远航——14(求两个数的最大公约数)
查看>>
django-blog-zinna搭建个人blog
查看>>
as3 文本竖排效果实现
查看>>
Window下Eclipse+Tomcat远程调试
查看>>
夜间模式的开启与关闭,父模板的制作
查看>>
2016/4/19
查看>>
计算一元二次方程的根
查看>>
队列和栈
查看>>
升级了U3D引擎一下,苦逼了...
查看>>