在一个线程中调用另外一个线程,比如:A线程调用B线程
A线程只接收简单数据,并存数据。(耗时小)
B线程分析A线程存入的数据。(耗时大)A线程的优先级为tpHigher
B线程的优先级为tpIdle
那么按照理论的说法先执行A线程然后再执行B线程,如果A线程有数据进来,B线程将等待A线程接收数据完毕后再继续它原来的工作。
比如:
我同时发送10条数据,A线程将在1秒中接收完数据,而B线程分析数据要20秒钟
应该是A先执行,B等待,A接收完,B开始分析。
可是实际中却不是这样,A线程会等待B线程分析完后才接收下一数据。
变成:A先接收1条数据,B分析1条,A再接收1条,B再分析1条.........
请大家帮我分析分析,为什么会这样? (线程写法没问题,程序运行半年很稳定)

解决方案 »

  1.   

    没代码,随便说说
    估计LZ用到了TCriticalSection对象来锁定数据流
    如果线程A进行锁定,那线程B要读这个数据流就会挂起等待,反之也一样
    你可以试下让A线程一次性全读完,再运行B线程来处理这个数据流
      

  2.   

    在form里加个Memo,线程A读出一条,就向Memo1里加一行。
    Memo1的内容被修改就唤醒线程B,线程B从Memo1里取出第一行进行分析,分析完后删除第一行,继续取下一行,Memo1被取空后挂起自己。注意,2个线程对Memo1进行操作的时候,一定要使用Synchronize。