我建立一个类来管理一个线程。这个线程的结构是
while not terminated do
begin while (i<条件) do
begin 这里是个执行很长时间的任务,问题就出在这里,用户如果关闭程序,这里还没有执行完怎么办?这里是往数据库里写
数据的操作,很消耗时间。如果用户退出,我必须保证数据都写入数据库里才行。想知道如何做到用户点退出按钮的时候
必须等到任务完成后,程序才真正退出
end;
end;
while not terminated do
begin while (i<条件) do
begin 这里是个执行很长时间的任务,问题就出在这里,用户如果关闭程序,这里还没有执行完怎么办?这里是往数据库里写
数据的操作,很消耗时间。如果用户退出,我必须保证数据都写入数据库里才行。想知道如何做到用户点退出按钮的时候
必须等到任务完成后,程序才真正退出
end;
end;
解决方案 »
- 在delphi5下编的带数据库的程序,拷到别的没装delphi的机子上怎么就不好使了
- XDJM们,帮帮忙!ldftp.list的问题。
- 奇怪的BDE问题!
- (新手)DBGrid显示问题
- 一个小问题
- 求教一条语句语法
- DBChart的图形怎么保存,保存的扩展名是什么,怎么样再打开保存后的文件
- 急!intraweb使用service application 没有debug screen 你是怎么解决的!!!
- 关于ado数据库的添加,修改和删除!!
- 请教高手关于sql语句的问题.请进...
- delphi xe7 怎么更新SDK来支持安卓6.0
- 到底是访问VCL需要用Synchronize还是改变VCL需要用
AEvent.WaitFor(AWaitTime)
2,线程变量是运行时无信号,结束了有信号,可以利用这个,用WaitForSingleObject()或WaitForMultipleObjects()参考:http://blog.csdn.net/jankercsdn/article/details/51323690
program Project1;{$APPTYPE CONSOLE}uses
SysUtils,
Classes,
SyncObjs;type
MyThread = class(TThread)
protected
procedure Execute(); override;
end;var
Wait: TCountdownEvent;{ MyThread }procedure MyThread.Execute;
begin
Sleep(Random(3000));
Wait.Signal();
end;var
i: Integer;
const
THREAD_COUNT = 100;
begin
Wait := TCountdownEvent.Create(THREAD_COUNT);
for i := 1 to THREAD_COUNT do
begin
MyThread.Create(False);
end;
Wait.WaitFor();
end.