1.用线程控制ClientSocket进行记录发送,如何控制发送频率?(如果要说Sleep,我用了一下,频率控制得不是很精确,可否具体说明)2.当发送线程在发送记录时,在主线程中用ServerSocket进行接收服务器发送的记录,我在ServerSocket的OnConnect中Suspend了发送线程,在OnDisConnect中Resume发送线程。当服务器一次发送记录较少时,程序运行正常,但如果一次发送记录较多,程序就会在接收到几条记录后死掉。请问这应该怎么解决呢?我的QQ:19420047 请各位老大帮忙啊!!!

解决方案 »

  1.   

    1,你需要多精确呢?sleep(),gettickcount(),ttimer精度都是差不多的,几十个毫秒。
    2,
    》》》ServerSocket的OnConnect中Suspend了发送线程???
    在阻塞方式下面,TServerSocket的OnConnect事件不会触发的。
      

  2.   

    TO:halfdream(哈欠) 
      我的ServerSocket是非阻塞方式的,在这种方式下OnConnect,OnDisConnect事件都是可以触发的啊。
      现在的问题是我可以接收,但当服务器一次发送记录较多时程序会在接收到几条记录后死掉....
      

  3.   

    1.可以用延时
    procedure Delay(Ms: Real);
    var
      S1, E1: Int64;
    begin
      //QueryPerformanceCounter 为当前次数.
      QueryPerformanceCounter(S1);
      //
      E1 := Trunc(Ms*g_nfreq/1000);
      E1 := E1+S1;
      repeat
        QueryPerformanceCounter(S1);
      until S1>=E1;
    end;
    2.你可以在服务器和客户端实行应答方式
      每一次应答都创建一个线程YourThread:=TYourThread.Create(False);
      在你的线程的Execute方法中:Synchronize(线程的执行事件);
      

  4.   

    TO:halfdream(哈欠) 
      线程的Suspend是将线程暂停了不是?而Resume是使线程恢复运行。那么当服务器一次发送记录较少时(即线程的Suspend,Resume转换较慢时),程序没有出问题,应该表明了我在接收数据的处理上应该没有问题是吗?程序出问题应该是在暂停和恢复之间出的问题,是吗?可这又要怎么解决呢?To: wycg_cnh20(伤心郁闷中) 
     延时和Sleep有什么区别吗?
      

  5.   

    另外还有一个问题,就是如何拒绝接收未知IP向ServerSocket发送的内容?
      

  6.   

    TO:halfdream(哈欠)   1.我现在用SLEEP来控制发送频率,但当线程sleep时,程序很难对用户的操作(比如:挪动程序位置)有响应,请问Sleep时,系统是如何处理线程的呢?
       例:当sleep(1000)时,System Idle Process占用cpu为80%以上,而我的程序则只有3%左右....  2.现在我服务端放在其它机器上试了,接收没有出问题了。但发送速度很慢,这是由于网络原因吗?但我只是局域网上的不同机器啊....