用C ++模拟Java Thread类

时间:2014-08-28 14:45:24

标签: java c++ multithreading

我试图在C ++中创建类似于Java Thread对象的自己的Thread类。我理解C ++不使用 implementation ,所以我在C ++ Thread Object中保持对函数的引用作为变量。

我遇到了Thread对象的第二个构造函数,我作为我的线程对象的用户要指定你想要运行的函数。

我收到的消息是

Thread.cpp:23:58:错误:从'void()(void )'无效转换为'void *()(void ) '[-fpermissive]

#ifndef THREAD_H
#define THREAD_H

#include <iostream>
#include <pthread.h>
#include <cstdlib>
#include <string.h>


class Thread
{
    public:
        Thread();
        Thread(void (*f)(void*));
        ~Thread();

        void* run(void*);
        void start();

    private:
        pthread_t attributes;
        int id;
        void (*runfunction)(void*); //Remember the pointer to the function

};

void* runthread(void* arg); //header


#endif

这是我的C ++文件

#include "Thread.h"

Thread::Thread()
{
    memset(&attributes,0,sizeof(attributes));

}

Thread::Thread(void (*f)(void*))
{
    runfunction = f;
    //(*f)();
}

Thread::~Thread()
{
    id = pthread_create(&attributes, NULL, runthread,this);
}

void Thread::start()
{
    memset(&attributes,0,sizeof(attributes));
    id = pthread_create(&attributes, NULL, *runfunction,this);
}

void* Thread::run(void*)
{

}

void* runthread(void* arg)
{
    Thread* t = (Thread*) arg;
    t->run(NULL);
}

1 个答案:

答案 0 :(得分:2)

pthread_create期望一个void*参数返回void*的函数,并提供一个返回void的函数。

但是,正如评论所说,使用C ++内置线程是更好的选择。