首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

TIdTcp多线程阻塞有关问题,请高手多指点,等

2012-04-07 
TIdTcp多线程阻塞问题,请高手多指点,急等我客户端用TIdTcpClient来接收数据,我是放在一个单独线程里的,当

TIdTcp多线程阻塞问题,请高手多指点,急等
我客户端用TIdTcpClient来接收数据,我是放在一个单独线程里的,当接收线程收到数据后会重画一个网格控件,因为数据量大时延迟会比较大,如果在在收到数据时同步画控件的话,界面会有间隙的死掉,我现在的思路是客户端维护一个队列,收到的数据放到队列里,然后当全部收完后再通知界面进行重画,但是我现在把界面的代码注掉了,接收线程里只接收网络包,界面还会卡住,这是为什么?

    frmMain.tcpInfo.WriteBuffer(pData[0],len,true);
        Application.ProcessMessages;

 //在这边地方线程会等待,但是按理说只应该是接收线程等待,主线程(即界面)不应该也等待啊
    size:=frmmain.tcpInfo.ReadFromStack(FALSE,300*10000,FALSE);

[解决办法]
1. 在线程内, Application.ProcessMessages; 这条语句是肯定不能要的。
2. "然后当全部收完后再通知界面进行重画 ",不知楼主是如何实现的。象楼主的这种程序,可以采用两个线程,一个线程负责从TIdTCPClient读取数据并写入队列,另一个线程负责从队列中取出数据并在主界面上显示。两个线程之间需要协调好对队列的访问权,这个可以通过临界区来实现。

热点排行