队列问题处理,请指教(100分)

  • 主题发起人 主题发起人 新手上路吴
  • 开始时间 开始时间

新手上路吴

Unregistered / Unconfirmed
GUEST, unregistred user!
要将指定文本内容,发送到另外一个程序处理
如user.txt,内容为:(用户,次数),大概有30w用户,需要读取文本,按照指定的格式发送(TNMUDP) 给另外一个程序处理。
目前处理方式:readln文本,压入队列,timer按照速度(如每秒1条发送)发送指定程序。
问题:readln很快处理完毕,队列总是满导致丢失数据,如果readln间用sleep,那么又耗费cpu资源,各位有没有好的方法?
 
用线程吧
 
使用多线程,然后中间设置一个缓冲区,如果缓冲区满,不足够放下一条记录,那就等待,这样比较好啊,!
 
用线程吃屎吧,,给具体方法,最好附加代码
 
如每秒1条发送改为发送完成[red]发送消息通知[/red]再发下一条。
 
TQueue 用Push 和pop来实现吧
 
搞不懂为什么要用队列? readln这么快,发之前再读不行吗,什么要分离处理?
 
同意楼上,完全可以在确定要发送的时候再去 Readln
 
楼主这样处理肯定是有他的道理的,可以把延迟改为线程的,即sleep(100)改为delay(100)
procedure Delay(const uDelay:dword);
var
n:dword;
begin
n:=GetTickCount;
while ((GetTickCount-n)<=uDelay) do
application.ProcessMessages;
end;
 
后退
顶部