午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

在linux c++類中的成員函數(shù)里創(chuàng)建多線程要注意的地方(轉(zhuǎn))

 書劍閣2013 2015-04-24

 注:沒有找到原文連接,只找到了轉(zhuǎn)載文章的連接

如何在linux 下c++中類的成員函數(shù)中創(chuàng)建多線程

linux系統(tǒng)中線程程序庫(kù)是POSIX pthread。POSIX pthread它是一個(gè)c的庫(kù),用C語言進(jìn)行多線程編程我這里就不多說了,網(wǎng)上的例子很多。但是如何在C++的類中實(shí)現(xiàn)多線程編程呢?如果套用C語言中創(chuàng)建多線程的方式,在編譯的時(shí)候會(huì)出現(xiàn)...does not match `void*(*)(void*)..這樣的錯(cuò)誤。出現(xiàn)這種情況的原因是,編譯器在處理C++和C文件上是不同的,也就是說C++和C語言里邊指針函數(shù)不等價(jià)。解決這種錯(cuò)誤的方法

有兩種:
1、不要將線程函數(shù)定義為類的成員函數(shù),但是在類的成員函數(shù)里邊調(diào)用它。
例如:
[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、將線程函數(shù)作為類的成員函數(shù),那么必須聲明改線程函數(shù)為靜態(tài)的函數(shù),并且該線程函數(shù)所引用的其他成員函數(shù)也必須是靜態(tài)的,如果要使用類的成員變量,則必須在創(chuàng)建線程的時(shí)候通過void *指針進(jìn)行傳遞。
例如:
【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;
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多