Проблема заключается в том, что функцию, которую нужно передать в поток, находится в классе, и к сожалению её нельзя обозначить как static
Ниже приведен исходный код:
class MTcp_server
{
private:
bool sock_inited;
bool listening;
char buff [1024];
int clients;
int serv_error;
unsigned id_lstn;
SOCKET serv_socket;
sockaddr_in serv_addr;
unsigned int __stdcall lstn (void*);
public:
int port;
MTcp_server(int);
int out_error ();
void create_sock();
void close_sock();
void blind_serv();
unsigned listen_start(int,void*);
void listen_end (unsigned);
void send (int);
void send (double);
void send (char);
void send (char*);
void send (string);
void send (bool);
unsigned int __stdcall foo (void*);
~MTcp_server();
};
// тут типо конструкторы и прочие функии, которые не какое отношение не имеют
unsigned MTcp_server::listen_start(int n, void* indata)
{
if (listening==0)
{
if (listen(serv_socket,n))
{
serv_error=WSAGetLastError();
}
else
{
serv_error=0;
listening=1;
unsigned int id;
_beginthreadex(NULL,0,lstn,indata,0, &id);
return id;
}
}
}
unsigned int __stdcall MTcp_server::lstn (void* indata)
{
MTcp_client_data client;
int client_addr_size=sizeof(client.client_addr);
while (client.client_socket=accept(serv_socket, (sockaddr *) &client.client_addr, &client_addr_size))
{
clients++;
client.hst=gethostbyaddr ((char*)&client.client_addr.sin_addr.s_addr,4,AF_INET);
unsigned clid;
//_beginthreadex(NULL,0,foo,indata,0, &clid); //тут такая же проблема
}
}
// дальше функции и деструктор класса
И вот тут проблема вышла:
H:\codeblocks\4\tststr\..\..\1\Test\Inet.hpp|142|error: argument of type 'unsigned int (MTcp_server:)(void*)' does not match 'unsigned int (*)(void*)'|
Пожайлуста помогите, буду очень благодарен (да если это важную роль сыграет, то компилятор: mingw (gcc 4.6.2))