作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个匿名线程进行一些后台处理:
procedure TForm1.FormCreate(Sender: TObject);
begin
TThread.CreateAnonymousThread(procedure begin
while True do begin
Sleep(500);
OutputDebugString('I am alive');
end;
end).Start;
end;
该线程不与主线程共享任何资源,它只是坐在那里并“永远”运行。
因为没有像 Terminate
这样的内置机制for anonymous threads ,这是否意味着当进程的主线程退出时我不必通知线程?
如果您刚刚启动一个新的 VCL 应用程序并将上面的代码粘贴到 FormCreate 事件中,它将写入 I am alive
每半秒显示一次调试消息。当应用程序退出时(即通过关闭表单),线程似乎也退出了,尽管它不检查任何信号。
可以吗,或者我必须使用 TEvent
来实现一些信号吗?或者类似的通知线程?
还是写一个自定义的TThread
更好后代并保留对线程的引用 Thread.Free
稍后再做吗?
最佳答案
您需要终止您创建的任何线程,甚至是匿名线程,例如:
procedure TForm1.FormCreate(Sender: TObject);
begin
TThread.CreateAnonymousThread(procedure begin
while not Application.Terminated do begin // <--
Sleep(500);
OutputDebugString('I am alive');
end;
end).Start;
end;
关于multithreading - 如果主线程完成,我是否必须向匿名线程发出退出信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462029/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!