CAsyncSocket::Connect 返回值问题

最近需要用 CAsyncSocket 和 CSocket 接收数据,也就涉及到了 Connect 问题。


CAsyncSocket  是异步的;CSocket 继承自 CAsyncSocket, 但是提供了同步的方法。


由于某软件提供的例子里用 CAsyncSocket 来获取数据,基于消息进行处理。本来没有什么问题,但是现在需要获取两个数据源的信息,一个是实时的,一个是历史数据。


如何在实时数据处理过程中获取一下历史数据呢?


可能答案1:多线程+同步


尝试着写了一下代码,却行不通。CAsyncSocket 虽然是异步处理,但消息都是发送给主线程(UI线程)来进行处理的,无法在Worker Thread进行异步接收数据,这样加锁之类的方法根本无法使用,处理实时数据时UI线程已经阻塞了,无法再处理历史数据的消息。


可能答案2: 将历史数据的获取修改为CSocket的同步方式


这样是比较合理的,历史数据不需要实时更新,在一定间隔时段内获取一次就行了。动手把示例代码里的函数替换了,测试通过。


然后,示例代码 Connect 调用时不检查返回值的,根本不管是否连接成功。加上返回值检查,问题来了。


CAsyncSocket::Connect 返回的是 0,GetLastError() 得到 10038,非法的Socket句柄?


一番搜索都没什么结果,直到后来想到 CAsyncSocket: 不是异步的吗,是否连接成功需要在 OnConnect 里判断。没有办法,把连接后的操作写到 OnConnect 里。


你可能感兴趣的:(CAsyncSocket::Connect 返回值问题)