做一个线程,如何控制该线程只能在规定的时间内结束,否则就强制把该线程释放掉?请给段源码谢谢!
解决方案 »
- ################################################################在线求救#####################################################
- 如何批量改变图片的背景颜色
- 动态创建TDataSetProvider后与DataSetProvider1的连接问题???
- 在自编记事本程序文件关联后打开时却没有内容?
- 使 用CANVAS 时: 比 如 当 窗 口 进 行 最 小 化 又 重 新 恢 复 时, 就 会 引 起 画 布 上 图 像 的 消 失,
- excel97和2000问题.在线等待。请大家关注。up有分。
- 帮忙把vb代码转成delphi代码。。。急。。谢谢!!!
- 救救我啊关于adoquery中的模糊查询问题
- 用ADOTable连接数据库,修改结果不能更新到数据库中。请问如何解决???
- 一个在MDI中打开窗口的过程,小弟不明白什么意思,请帮忙解释一下。谢谢。
- 有一个有关DBGrid的编号的问题?
- 模拟sqlplus中的工作过程!
if (now=....) then
begin
if (not thrd.suspended) then
begin
thrd.terminated ;
end ;
end ;
或者
BOOL TerminateThread( HANDLE hThread, // handle to the thread
DWORD dwExitCode // exit code for the thread
);
while not terminated do
begin
....end;
while not terminated do
begin
....end;
中间就死循环了呢?不就永远到不了
while not terminated do
这句了呢?
在循环体类加
if terminated then break;
主程序里加定时器.
方法2
只有当线程不能自己结束了。。不到实在不得已,不要用TerminateThread强制杀掉线程。。
type
TmycheckThread= class(TThread)
private
MYDCOMC: TDCOMConnection;
protected
procedure Execute;override;
public
Constructor Create(str:string);
end;var mycheck:TmycheckThread;
ax:bool;
constructor TmycheckThread.Create(str: string);
begin
MyDCOMC:=TDCOMConnection.Create(nil);
Mydcomc.ComputerName:=str;
MYdcomc.ServerName:='服务器名';
form1.Timer1.Enabled:=true;
FreeOnTerminate:=True;
inherited Create(true);
end;procedure TmycheckThread.Execute;
var i:integer;
begin
try
mydcomc.Open;
mydcomc.Close;
ax:=true;
form1.Timer1.Enabled:=false;
MyDCOMC.Free;
EXCEPT
ax:=false;
form1.Timer1.Enabled:=false;
MyDCOMC.FREE;
end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
mycheck.Terminate;
mycheck.Free;
end;procedure TForm1.Button5Click(Sender: TObject);
var i:integer;
begin
button5.Enabled:=false;
mycheck:=TmycheckThread.Create(计算机名称);
mycheck.Execute;
IF ax THEN
listbox2.Items.Add(计算机名称)
else
listbox3.Items.Add(计算机名称);
end;
button5.Enabled:=true;
end;大家看看有什么地方不对的啊?????
begin
mycheck.Terminate;
mycheck.Free;
end;
在timer里只让线程释放了,以后怎么处理的?
begin
mycheck.Terminate;//不是在回贴里面说了吗?它只改变Terminated属性值。。
mycheck.Free;//调用它的时候,线程可没有正常停下来。
end;