delphi多线程为什么无法用TerminateThread结束线程
functionMyfunc:Integer;stdcall;vari:Integer;beginfori:=0to300000dobegin//Form1.Canvas...
function Myfunc:Integer ; stdcall ;
var
i: Integer;
begin
for i := 0 to 300000 do
begin
//Form1.Canvas.Lock;
Form1.Canvas.TextOut(10, 10, IntToStr(i));
//Form1.Canvas.Unlock;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
t:= CreateThread(nil,0,@MyFunc,nil,0,ID);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TerminateThread(t,0);
end;
TerminateThread无法结束线程,点了没反应,线程还是在继续运行中,
线程句柄已经声明为全局变量
自己搞错了,按钮弄错窗口创建了 展开
var
i: Integer;
begin
for i := 0 to 300000 do
begin
//Form1.Canvas.Lock;
Form1.Canvas.TextOut(10, 10, IntToStr(i));
//Form1.Canvas.Unlock;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
t:= CreateThread(nil,0,@MyFunc,nil,0,ID);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TerminateThread(t,0);
end;
TerminateThread无法结束线程,点了没反应,线程还是在继续运行中,
线程句柄已经声明为全局变量
自己搞错了,按钮弄错窗口创建了 展开
1个回答
展开全部
释放线程最好用一下方法:
FThread.Terminate;
FThread.Resume;
FThread.Free;
FThread := nil;
FThread.Terminate;
FThread.Resume;
FThread.Free;
FThread := nil;
追问
前辈再请教下,如果 多线程 同时访问一个 函数 或者 变量需要加 临界区吗
这个函数 并不操作UI界面,也没有打开界面之类的操作,而全局变量 只是 写INT型变量
还有就是 一个 启动线程之前创建的全局对象,释放线程后,对象是否也跟着会释放
追答
如果只是访问但不更改,就不需要用加临界区;如果一个修改一个查询,就需要加临界区的;
变量对象不需要释放,线程释放后会自动释放;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询