做一个线程,如何控制该线程只能在规定的时间内结束,否则就强制把该线程释放掉?请给段源码谢谢!
解决方案 »
- 我想把INI文件搞成这样,然后根据换行符或者其他办法读出它的行数!
- 求fastReport,reportMachine的图形报表DEMO,高分,UP有分!
- 有什么方法能够最快的比较出两个TStrings之间的曲别??
- Ttreeview的几个小问题
- 散100分求解,在SQL中的語句'select count(distinct XX ) from Table',在Delphi中如表達?
- 如果知道系统已安装有打印机?
- 在线急待:关于richedit
- delphi能不能实现将设计好的窗体存到文本,或数据库,需要使用的时候在动态创建???
- 怎样读取一个路径下的所有文件
- 见鬼了, 我用GetSystemTime 获取系统时间,结果小时数差了8小时,应该是10点,结果是2点,有人遇到过么?
- 有一个有关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;