【发布时间】:2013-09-15 22:32:46
【问题描述】:
我来自哥伦比亚,所以错误是西班牙语。这似乎是获得答案最快的地方...
我一直在尝试制作一个简单的程序来创建线程并将信息保存在向量中,但是当我构建代码时出现下一个错误:
...Lanzador.cpp|19|error: no se puede convertir ‘void* (Hilo::*)(void*)’ a ‘void* (*)(void*)’ para el argumento ‘3’ para ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’|
我有三个文件:Hilos 的标题:
#ifndef HILO_H
#define HILO_H
using namespace std;
class Hilo
{
public:
Hilo();
virtual ~Hilo();
void addHilo(int);
void* ImprimirHilo(void*);
protected:
private:
};
#endif // HILO_H
Hilo.cpp 说:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <pthread.h>
#include <unistd.h>
#include "Hilo.h"
using namespace std;
vector<int> info (1);
Hilo::Hilo()
{
//ctor
}
Hilo::~Hilo()
{
//dtor
}
void Hilo::addHilo(int tiempo){
info.push_back(tiempo);
}
void* Hilo::ImprimirHilo(void *threadid)
{
long tid;
tid = (long) threadid;
int n =info.at(tid);
for (int i=n; i>0; i-- ){
info.at(tid)=i;
cout << "El hilo numero: " << tid << " tiene " << i <<" segundos"<< endl;
sleep(1);
}
pthread_exit(NULL);
}
以及拥有主要 Lanzador.cpp 的类
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include "Hilo.h"
using namespace std;
int main (){
Hilo h;
pthread_t threads;
int tiempo=0;
int rc;
int contador=0;
cout << "Para salir oprima 0 \n"<<endl;
cout << "Escriba el tiempo del hilo" << endl;
while (true){
cin >> tiempo;
if (tiempo>0){
contador++;
h.addHilo(tiempo);
rc = pthread_create(&threads, NULL,&h.ImprimirHilo, (void*)contador);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
}
pthread_exit(NULL);
}
我希望你们能帮助我。抱歉英语不好,感谢您的帮助
【问题讨论】:
-
非静态成员函数不是函数。你不能调用一个成员函数(它需要一个对象!)。这个问题有数千个重复项。
-
您可以将您的语言环境更改为 GCC 的英语 / 以某种方式运行。
-
@millimoose,是的,只需设置 LANG=C
-
横向建议:新的
<thread>不会比尝试结合pthreads 和C++ 更好吗?或者 Boost.Thread 如果<thread>不可用。 (也就是说,我承认我对这些库的了解就是它们存在。)
标签: c++ multithreading pthreads