------------------最菜的线程问题!---------------(100分)

  • 主题发起人 主题发起人 lovecathy
  • 开始时间 开始时间
L

lovecathy

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样设计这个线程:
* 该线程负责对多个文件(比如图片文件)的读取,每读完一个文件之后立刻通知主线程,让主线程及时显示这个文件的内容;
* 在子线程工作的时候,主线程可能需要清空或者更新待读文件列表
小弟菜鸟,初学多线程,最好能提供一点代码!谢谢!
有完整的参考另送100分
 
大家帮忙啊,难道很难么?
 
如果能用其他的手段实现目标,也给点思路吧~~~
 
1.线程中维护一个文件列表队列
2.主线程更新文件列表就是对队列进行入队和出队操作
3.子线程对队首执行操作,完成后对队首做出队操作,并且发消息给主线程
4.主线程响应消息,做显示文件内容的操作
注意,队列可以使用TList实现,在出队入队都需要使用同步,比如临界区
基本思路就是这样,实现起来也不难
但是建议仔细学一下线程的相关知识,毕竟要稳定的使用线程也不是很容易
 
谢谢muhx:
我对线程已经有了基本的概念和理论,但由于不好找到比较好的例子,所以在同步的策略上不知道如何是好,所以如果大家能给点代码的话,小弟感激不尽...
 
线程不是有Synchronize方法吗?
自己写一个过程去操作主界面(你说的主线程),在线程里用Synchronize方法执行你这个过程
 
OK,,那怎么在子线程工作的时候更新文件列表呢
 
给主程序一个自定义消息
 
关键是收到消息之后怎么取得和处理数据
 
SendMessage和PostMessage都有参数啊,其中两个Integer的参数你可以定义你要传递的内容
当成指针使用
 
unit UnitThread;
interface
uses
Classes;
type
TTestThread = class(TThread)
private
lCount : LongWord;
protected
procedure ShowResut;//处理
procedure Execute;
override;
end;

implementation
uses ping, SysUtils;
{ TTestThread }
procedure TTestThread.ShowResut;
begin
Frm_ListIP.edtResult.Text := IntToStr(lCount);
end;

procedure TTestThread.Execute;
var
i : integer;
begin
lCount := 50;
FreeOnTerminate := True;
for i := 1 to 90000do
begin
if Terminated then
Break;
inc(lCount);
Synchronize(ShowResut);//调用
end;
end;

end.
 
Synchronize效果等于单线程。。。
OK,到此吧,问题在很多天前就解决了,忘了结贴。
谢谢大家!
 
多人接受答案了。
 
后退
顶部