我对一个我不太了解的行为有疑问:

我有两种C++代码变体:

CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE ) clientThread, ( LPVOID ) connectionSocket, 0, NULL );

线:
Client a;
a.clientsocket = connectionSocket;
a.testText()
a.sendSocket();

工作正常(sendSocket将一些测试数据发送到套接字)。

但是如果我这样做
Client a;
a.clientsocket = connectionSocket;
CreateThread( NULL, 0, ( LPTHREAD_START_ROUTINE ) clientThread, ( LPVOID ) &a, 0, NULL );

和使用
线:
a.testText();
a.sendSocket();

仅testText()有效。

我有些困惑,为什么会这样。我是C++的业余爱好者:-)

编辑:

添加了Client类:
class Client
{
public:
    SOCKET clientsocket;

    Client()
{
}
~Client(){}
void displayMessage()
{
        std::cout << "test message client class" << std::endl;
}
int sendSocket()
{
    char *sendbuf = "CLIENT TEST";
    send(clientsocket, sendbuf, (int)strlen(sendbuf),0);
    closesocket(clientsocket);
    return 0;

}
};

最佳答案

Anon可能在某些方面超出了正确的轨道,但我认为这是connectionSocket。但是,当您说a.sendSocket()不起作用时,您将必须提供更多详细信息。应用程序崩溃了吗?你有异常(exception)吗?该应用程序是否可以继续工作,但是sendSocket()调用并未导致实际发送内容? 实际问题是什么?

关于c++ - C++将对象传递给线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10179357/

10-09 06:36