delphi - 有没有办法退出被卡住的 Parallel.foreach 循环中的线程
问题描述
我正在使用 OmniThread Parallel.foreach()
。在某些情况下,循环需要很长时间或卡住。
我想知道,是否可以使Parallel.foreach()
循环中的每个进程超时?
解决方案
简而言之:不,没有。
除非您在“线程主体”代码中对超时处理进行编程(在执行中调用的内容)。
例如,我的数据库引擎允许CancelProcessing
从运行查询的不同线程发送对运行查询的调用,这将“干净地”结束正在运行的子线程。
子线程的“脏”端:
我向 Omnithread 的 github 站点添加了一个FR ,以向接口(和类似的)添加一个(Dirty)Terminate
方法。IOmniParallel
这是一个缺点,因为杀死子线程可能会给你留下内存/资源泄漏。
同时,您可能会使用这种肮脏的关闭解决方案/解决方法,它实际上解决了类似的问题(我在并行处理的例程中遇到了死锁,所以我parallel.Waitfor
从未返回 true,更糟糕的是,我的IOmniParallelTask
接口变量从未被释放,导致调用线程阻塞为出色地。
推荐阅读
- css - 我可以在 CSS 网格中沿垂直轴 (y) 居中网格项目而不将容器的高度折叠到内容高度吗?
- python - Firebase 函数 - 使用 Python 推送通知
- angular - d3 - 使用嵌套/组创建查找
- html - 是否可以在不更改其父级的情况下更改网格容器开始/结束之外的背景颜色?
- python - 从一组变量生成可解码字符串
- laravel - 如何循环遍历 json 数据
- python-3.x - 将列与 pandas_schema 进行比较
- swift - 我的 Cocoapods 框架方法不能通过在另一个应用程序中导入来使用
- spring-boot - 使用 Maven 将环境变量传递给 Spring Boot 应用程序
- powershell - 在 Powershell 中将字符串从 CSV 转换为 DateTime