brevleq
(usa Slackware)
Enviado em 20/10/2008 - 16:58h
Estou estudando pthreads, porém não estou conseguindo compilar o meu programa no c++! Vi na internet que eu deveria usar uma função estática ou uma função estilo c, porém nenhuma das duas opções resolveu meu caso!!
Adicionei os fontes abaixo:
main.cpp
========================================================================
#include <stdio.h>
#include <pthread.h>
#include "CommandListener.h"
#include "ScreenPrinter.h"
int main(void){
printf("olá!!");
ScreenPrinter printer;
CommandListener cmdListener;
//while(1){
//}
return(0);
}
========================================================================
CommandListener.h
========================================================================
#ifndef COMMANDLISTENER_H
#define COMMANDLISTENER_H
#include <stdio.h>
#include <pthread.h>
class CommandListener{
public:
static const int NENHUM_PRESSIONADO=0;
static const int A_PRESSIONADO=1;
static const int B_PRESSIONADO=2;
static const int C_PRESSIONADO=3;
CommandListener(void);
int getCommad(void);
void commandWaiter(void);
private:
pthread_t thread;
static void createThread(void *obj);
int pressed;
};
#endif
========================================================================
CommandListener.cpp
========================================================================
#include "CommandListener.h"
CommandListener::CommandListener(void){
printf("CommandListener");
pthread_create(&thread,NULL,&createThread, this);
printf("CommandListener Criado");
}
void createThread(void *obj){
reinterpret_cast<CommandListener *>(obj)->commandWaiter();
}
int CommandListener::getCommad(void){
return(pressed);
}
void CommandListener::commandWaiter(void){
while(1){
char valor;
valor=getchar();
if(valor=='a' || valor=='A')
pressed=A_PRESSIONADO;
if(valor=='b' || valor=='B')
pressed=B_PRESSIONADO;
if(valor=='c' || valor=='C'){
pressed=C_PRESSIONADO;
break;
}
}
}
========================================================================
O erro retornado pelo compilador é esse:
make
g++ -c -pipe -Wall -W -O2 -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt/mkspecs/default -I. -I. -I/usr/lib/qt/include -o CommandListener.o CommandListener.cpp
CommandListener.cpp: In constructor 'CommandListener::CommandListener()':
CommandListener.cpp:8: error: invalid conversion from 'void (*)(void*)' to 'void* (*)(void*)'
CommandListener.cpp:8: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)'
make: ** [CommandListener.o] Erro 1
Como eu resolvo isso pelo amor de Deus??