请教:关于CArchive::Flush()的疑惑 (与socket有关)
我想实现一个功能:browser请求一个HTM文件时,server只输出该文件的前半部分,其余的在未来几分钟或几小时内陆续输出(当然该TCP连接一直不关闭)。
线程函数的关键代码:
//pUserData是本线程的入口参数,UserData类的实例存有本线程的地址
while((*pUserData).isThreadActive()) //主线程可在此指示本线程关闭
{
CArchiveA.WriteString((*pUserData).getNewMessage())//陆续输出HTM代码
CArchiveA.Flush(); //这句是核心,对吧?
(*(*pUserData).getThreadAddress()).SuspendThread(); //挂起自已,等待主线程唤醒
}
return 0; //线程自杀
问题是:
CArchiveA.Flush()好象并不会永远正常工作。
server程序现在工作正常:browser显示HTM前半部分后,处于一直在等待剩余输出的状态。
server一有输出browser立刻显示。
但是,当我重启NT或重新登录用户后,运行server程序,BROWSER就什么都没显示,一直在等。
查看server窗口,代码的确已运行到了 CArchiveA.Flush();之后。
注释掉上述代码,browser显示HTM前半部分。去掉注释再试。得到了以前的期望效果。
重启NT后,毛病又犯了。
屡试不爽。
问题在哪呢?是不是CArchiveA.Flush()并未如我期望立刻输出内容到客户,系统想等缓冲满了再一起发送?