一个线程的问题?

xiaokun111 2006-07-03 04:13:44
在一个线程中调用另外一个线程,比如: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条.........


请大家帮我分析分析,为什么会这样? (线程写法没问题,程序运行半年很稳定)
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
erhan 2006-07-04
  • 打赏
  • 举报
回复
在form里加个Memo,线程A读出一条,就向Memo1里加一行。
Memo1的内容被修改就唤醒线程B,线程B从Memo1里取出第一行进行分析,分析完后删除第一行,继续取下一行,Memo1被取空后挂起自己。

注意,2个线程对Memo1进行操作的时候,一定要使用Synchronize。
2312 2006-07-04
  • 打赏
  • 举报
回复
可以试试楼上的方法,不在A线程中调用B线程呢,也就是接收和分析的线程各做各的,上来就开两个线程做这两件事情。
SonicX 2006-07-04
  • 打赏
  • 举报
回复
没代码,随便说说
估计LZ用到了TCriticalSection对象来锁定数据流
如果线程A进行锁定,那线程B要读这个数据流就会挂起等待,反之也一样
你可以试下让A线程一次性全读完,再运行B线程来处理这个数据流
huitouren519 2006-07-04
  • 打赏
  • 举报
回复
学习
risingsoft 2006-07-04
  • 打赏
  • 举报
回复
估计B线程启动的时机不对

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧