如何在Ios中创建套接字时在AcceptCallBack中创建新线程

时间:2014-09-04 09:27:13

标签: ios sockets cocos2d-x

我想创建套接字来连接多个设备,我有一个接受回叫功能

void AcceptCallBack(
                    CFSocketRef socket,
                    CFSocketCallBackType type,
                    CFDataRef address,
                    const void *data,
                    void *info)
{
    CFReadStreamRef readStream = NULL;
    CFWriteStreamRef writeStream = NULL;
    CFIndex bytes;
    UInt8 buffer[128];
    UInt8 recv_len = 0, send_len = 0;

    /* The native socket, used for various operations */
    CFSocketNativeHandle sock = *(CFSocketNativeHandle *) data;

    /* The punch line we stored in the socket context */
    char *punchline = info;

    /* Create the read and write streams for the socket */
    CFStreamCreatePairWithSocket(kCFAllocatorDefault, sock,
                                 &readStream, &writeStream);

    if (!readStream || !writeStream) {
        close(sock);
        fprintf(stderr, "CFStreamCreatePairWithSocket() failed\n");
        return;
    }

    CFReadStreamOpen(readStream);
    CFWriteStreamOpen(writeStream);

    /* Wait for the client to finish sending the joke; wait for newline */
    // How to create a new IOS thread from here to read data from client.

}

我想创建NSThread来监听来自客户端的数据。因为这是一个C ++函数,所以我无法从Object C访问变量。 感谢。

1 个答案:

答案 0 :(得分:0)

这里有几个选项。

  1. 您可以在新的.mm文件中编写一个目标C帮助函数,并从您的C ++代码中调用它

  2. 您可以将C ++文件更改为.mm扩展名。这样你就可以将Objective C代码与C ++混合使用。您可能需要在文件顶部添加一些包含魔法的魔法: -

  3. #ifdef __OBJC__ // prevent C++ compiler errors #import <Foundation/Foundation.h> #endif

    3.您还应该考虑使用GCD。它使用C接口,可以使用dispatch_async()完成所需的一切。由于dispatch_async()使用块,因此如果您仍在使用.cpp文件扩展名,则需要设置-fblocks编译器标志。