100分,关于控件的事件的问题,怎么处理比较好?
最近在看服务器端的icop的东西,也在网上找了一些例子来看,试图移植一下,发现有一些问题,主要是关于事件的触发的问题:
打个比方,iocp是多个线程协同处理数据的,如果其中一个线程收到了数据,那么会调用onreceive事件来通知应用程序,问题来了,由于是线程收到了数据,那么依然是由线程来调用OnReceive事件,这样就会导致OnReceive里面写的代码不能操作VCL界面控件
还有一种方法,就是线程收到数据后,sendmessage给控件创建的一个不可见窗口,然后在这个窗口的消息处理代码里调用OnReceive,这样,数据的处理就提升到了主线程,在这里面可以对VCl界面控件操作。但是这样有个问题,就是线程在处理完成前是暂停的,如果处理的慢的话,很快,所有的线程都会被阻塞在SendMessage那里,性能会很低
不知道有什么办法解决这个问题?