我试图在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);
}
答案 0 :(得分:2)
pthread_create
期望一个void*
参数返回void*
的函数,并提供一个返回void
的函数。
但是,正如评论所说,使用C ++内置线程是更好的选择。