ClientSocket OnRead接受消息时按照指令解析所做的操作
Socket工作在NoBlocking模式下(异步)
指令
1、登录成功反馈指令,此时,需要初始化一些全局列表
2、接受消息指令,此时需要根据全局列表做相应的处理
此时,ClientSocket需要接受这两个指令做相应的处理,可是此时出现,指令1没有处理完,就处理指令2,从而由于全局列表没有初始化成功而导致程序出错。
我现在用信号源做处理,Onread的时候先waitforsingleObject,处理结束后再setEvent(hmutex)。
但是,处理指令2的时候,waitforsingleObject是在等待信号源,但是指令1缺不会处理了,程序死了。
请问我应该如何处理这种情况呢,如何让指令2等待指令1结束后处理呢?
处于NoBlocking模式的clinetSocket应该为每次OnRead开启一个线程吗?
Socket工作在NoBlocking模式下(异步)
指令
1、登录成功反馈指令,此时,需要初始化一些全局列表
2、接受消息指令,此时需要根据全局列表做相应的处理
此时,ClientSocket需要接受这两个指令做相应的处理,可是此时出现,指令1没有处理完,就处理指令2,从而由于全局列表没有初始化成功而导致程序出错。
我现在用信号源做处理,Onread的时候先waitforsingleObject,处理结束后再setEvent(hmutex)。
但是,处理指令2的时候,waitforsingleObject是在等待信号源,但是指令1缺不会处理了,程序死了。
请问我应该如何处理这种情况呢,如何让指令2等待指令1结束后处理呢?
处于NoBlocking模式的clinetSocket应该为每次OnRead开启一个线程吗?
我现在指令1不会执行了,不知道为什么?简单一点,就是这样
第一次onRead消息触发,执行初始化列表
第二次onRead消息触发,需要读取列表中的信息.
但是,执行初始化列表没有结束,第二次OnRead消息就触发了,从而需要读取列表时程序出错.
begin
waitForsingleObject(hMutex,INFINITE);
case iZl of
1:
begin
//初始化列表中
end;
2:
begin
//Recv message
//根据列表处理
end;
end;
setEvent(hMutex);
end;
OnRead事件是触发在主线程,不要这个事件里面作阻塞线程的同步操作。。就算要等待。。也只能类似while(xxx) Appliaction.processMessages;方式等待。
当然,在ONREAD事件里面这样消息循环等待也有很多细节要处理。
指令在队列里面,这样比用程序流程来形成队列要清晰些。
指令在队列里面,这样比用程序流程来形成队列要清晰些。
处理的不仅是指令,还有数据.那么需要把指令和数据同时进入list,那么,如果由于指令1及数据入list时间过长,也可能在处理过程中也可能出现我上述的问题.
OnRead事件是触发在主线程,不要这个事件里面作阻塞线程的同步操作 ,这是正确的.导致阻塞主线程,而死掉.
有没有其他解决方法呢?