我在做一個發送短信程序,但是當我在線程中創建與服務器的連接時,我得到一個錯誤。在C++中創建線程時出錯
g++ -L/usr/lib/i386-linux-gnu -o main Socket.cpp ServerSocket.cpp modemSMS_w.cpp main.cpp Config.cpp -lpthread -lserial -lxml2 -lmysqlclient
modemSMS_w.cpp: In member function ‘void modem::enviasms()’:
modemSMS_w.cpp:96:77: error: cannot convert ‘void* (modem::*)(void*)’ to ‘void* (*)(void*)’ for argument ‘3’ to ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’
程序:
#include "modemSMS_w.hpp"
#define CTRL_C "\x1A"
using namespace LibSerial;
using namespace std;
modem::modem()
{
}
void *modem::func_servidor(void *ptr)
{
ServerSocket server(30001);
try {
ServerSocket new_sock;
while(1)
{
server.accept(new_sock);
cout << "Conexao aceita" << endl;
}
}
catch (SocketException& e) {
cout << "Erro: Criando Servidor" << endl;
}
}
int modem::setSerial() {
.....
....
...
}
void modem::enviasms(){
pthread_t thread_servidor;
pthread_cond_t cv;
const int PORT_MON = 30000;
string serialPort = "/dev/ttyS0";
int argc;
int ret;
char **argv;
cout << "\n------------------------\n MODEM GPRS \n------------------------" << endl;
string mensagem ="Conversao";
mensagem.c_str();
ret = pthread_cond_init(&cv, NULL);
bool envia = true;
envia = true;
if (ret != 0)
{
cout << "Erro na criação do evento. Por favor reeinicie o programa." << endl;
}
//ERROR IN THIS LINE
pthread_create(&thread_servidor, NULL,&modem::func_servidor, (void*) true);
Config config;
SerialStream ssStream;
setSerial();
....
...
}
對不起,不知道幾乎沒有在C++中創建線程已經試圖解決這個問題,但是沒有sucess。
不知道你爲什麼要使用pthread_create原語來實現這樣的基本用法,但是如果你使用的是現代C++編譯器,最好使用'std :: thread'(或'boost:thread')。另外,對於你的問題,你傳遞一個指向一個成員函數的指針,指向一個自由函數的指針。那些不一樣。 – ereOn
[如何從成員函數中獲取「簡單」函數指針]的可能重複(http://stackoverflow.com/questions/15958553/how-to-get-a-simple-function-pointer-from-a-成員函數) –