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无法结束线程,点了没反应,线程还是在继续运行中,

线程句柄已经声明为全局变量
自己搞错了,按钮弄错窗口创建了
展开
 我来答
xtfnpgy
2014-12-17 · TA获得超过1784个赞
知道大有可为答主
回答量:1989
采纳率:76%
帮助的人:1104万
展开全部
释放线程最好用一下方法:

FThread.Terminate;
FThread.Resume;
FThread.Free;
FThread := nil;
追问
前辈再请教下,如果 多线程 同时访问一个 函数 或者 变量需要加 临界区吗
这个函数 并不操作UI界面,也没有打开界面之类的操作,而全局变量 只是 写INT型变量

还有就是 一个 启动线程之前创建的全局对象,释放线程后,对象是否也跟着会释放
追答
如果只是访问但不更改,就不需要用加临界区;如果一个修改一个查询,就需要加临界区的;
变量对象不需要释放,线程释放后会自动释放;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式