проблемка с _beginthreadex
От: maxis11 Украина  
Дата: 12.03.12 22:13
Оценка:
Проблема заключается в том, что функцию, которую нужно передать в поток, находится в классе, и к сожалению её нельзя обозначить как 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))
c++ _beginthreadex потоки mingw
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.