我现在在开发大文件(超过1GB)传输的服务器程序,创建了CAsyncSocket的派生类CSessionSocket和文件传输操作相关的线程类CSessionThread。CSessionThread创建了CSessionSocket的对象并利用它进行文件传输操作。
    由于文件大,在异步模式下调用Send函数时肯定会出现Send函数返回-1的情况。针对这一情况,理想做法是让CSessionThread线程处于等待状态,等窗口收到FD_WRITE消息 or CSessionSocket::OnSend函数被调用时让CSessionThread继续运行。但经过试验,我发现这样一种情况:只有线程CSessionThread执行完成后,OnSend函数才会被调用。也就是说,如果线程CSessionThread处于一种等待状态,它将一直等待或直到超时才能继续运行。我认为其中的原因是在某一时刻,一个CAsyncSocket对象只能被一个线程占用。对此,我有下面几种解决思路:
    方法一:Send函数返回-1后Sleep,然后重新发送数据,我认为这种做法有失严谨,因为究竟Sleep多长时间才合适,这是一个不确定的问题。
    方法二:线程CSessionThread仅使用CAsyncSocket的成员m_hSocket,发送数据时使用Windows API函数Send。能否成功,我没试过。我认为这么做没有什么意义,既然我使用了Windows API,创建CAsyncSocket对象也没有什么意义,干脆全用Windows API算了。
    方法三:线程CSessionThread建立消息循环,专门接受FD_WRITE消息。我不知道其中的具体做法,也不知道到底靠不靠谱。
    大家对这个问题怎么看,有没有更优解法?