如何解决对FD_READ响应的函数的重入问题?我在winsock编程中,使用了一个函数响应FD_READ事件,也就是说,一旦有了FD_READ事件,系统就会自动调用我这个函数。譬如说这个函数为f();我在这个函数中对端口进行了读取操作,如果读取操作之后还有数据可以读取,会再次发生FD_READ事件。这样就有了一个很讨厌的函数重入问题。譬如,sock接受到了一串字符005abcde. 本来是一个结构,前一部分3字节表示后面字符串长度。于是,我希望我的函数线读取3个字节,然后分析3个字节得到长度,更具长度开辟内存,然后再读取字符串。结果,我在f();中读取了3个字节之后,还没有来得及任何处理,系统又发生了新的FD_READ事件,于是f()被再次调用,再次读取了3字节,显然这3字节不是我计划中需要的003.-------------------------------------------------
不晓得大家是如何解决这种问题的?
-------------------------------------------------
我尝试过,f()只负责读取,然后放到buf中。另外搞个循环不断检查buf并依次处理,这样倒是可以解决问题,但是循环严重占用了系统资源。
另外,我还尝试在f()开头设置适当的全局记号变量,避免它重复调用,一定程度上可以使用,不过代码我觉得很不好看,很狼狈。-------------------------------------------------
我想应该有简单优雅的解决办法的,只不过我没有想到罢了
因此请教大家,谢谢       *_^-------------------------------------------------