问题标签 [tthread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
849 浏览

multithreading - 使用 WaitForSingleObject() 等待 TThread 完成

我正在创建一个线程,然后说要等待它通过 WFSO 调用终止(下面是简化的伪代码,显然没有人想在创建线程后立即等待它)。

在主线程中

我在做什么错/错过了什么?如果我没有 WFSO,线程将在大约 10 秒内完成。

编辑:使用 FreeOnTerminate=false 创建不会产生此问题。

0 投票
0 回答
129 浏览

delphi - TThread 一次一个实例

我的应用程序需要一个后台线程。如果被触发,它将简单地对 SQL 数据库进行一些查询并更新另一个 Table 。为了简单起见,我为自己构建了一个测试项目来测试我的想法。我想出了以下代码:

我正在使用私有全局变量来检查是否可以启动,我认为这应该是安全的,因为我只有一个后台任务。Execute 将在 try except end 块内。

我试图检查我是否有内存泄漏,但 Delphi 没有报告任何问题。

我的问题是:

如果我将 FreeOnTerminate 属性设置为 true,那么执行后线程会自动释放自己吗?

谢谢你。

更新 1

至于线程内的 VCL 操作,我将使用它:

0 投票
0 回答
85 浏览

multithreading - TThread 自我终止,我需要带析构函数的 OnTerminate 吗?

我有一个线程类来做一些工作,然后向主应用程序线程发布一条消息并自行终止。这样做的正确方法是什么,我需要一个 OnTerminate 过程还是析构函数就足够了?

(线程列表与问题有点无关,我想用它来检查有多少线程仍在工作)

.

0 投票
1 回答
244 浏览

delphi - Delphi:如何在线程中打开批处理文件(Windows服务)

我写了一个 Windows 应用程序,现在我想把它转换成一个 Windows 服务。在我的 Windows 服务程序中,我有一个应该打开批处理文件的线程。通常我用 Shell Execute 打开批处理文件:

但我不能在我的线程中使用 SW_Hide。有没有其他方法在线程中打开批处理文件,还是我使用了正确的方法?

0 投票
1 回答
244 浏览

multithreading - 在阻塞主线程中使用 TEvent 和 MsgWaitForMultipleObjects

我发现了这个 Remy 的有趣代码。 Delphi:如何在本地创建和使用 Thread?

可以这样做,以便我可以执行多个线程并等到它们全部完成然后继续主线程吗?我试过这样但没有成功......

0 投票
1 回答
208 浏览

delphi - 如何检测文件夹更改何时完成?

我正在使用 Delphi 和ReadDirectoryChangesW(in a TThread) 来检测特定文件夹何时发生更改。这工作得很好。我需要知道更改何时完成,以便我可以安全地对文件执行某些操作。

这是场景:我已将打印机映射到特定的文件名和文件夹(文件:本地端口c:\MonitorMe\prinfil.dat)。该文件夹中的唯一文件将是该打印机文件。打印作业可以是单页,也可以是数百页——我必须等到“打印到文件”完成后才能触发进一步的操作。我正在监视FILE_NOTIFY_CHANGE_SIZE并且FILE_NOTIFY_CHANGE_LAST_WRITE- 所以我会定期收到文件仍在“正在打印到”的通知。

我正在寻找一种安全的方法来实际检测“打印”何时完成。我想我可以在表单中设置一个计时器,然后Synchronize(StillPrinting)在线程中调用。StillPrinting将停止并重新启动计时器,以便只有在大约 300 毫秒的 NO 文件夹更改之后,计时器才会执行 - 触发OnAfterPrintComplete事件。这似乎很危险。

我可以寻找什么来确定文件保存是否已完成?

0 投票
1 回答
95 浏览

multithreading - TThread.OnTerminate 执行线程

Delphi 帮助TThread.OnTerminate指出:

分配给 OnTerminate 事件的方法在主线程的上下文中执行,而不是在被终止线程的上下文中执行。

甚至在主线程之外的另一个线程中创建线程时也会出现这种情况吗?

那么,是在OnTerminate创建 的线程中调用TThread,还是在主线程中调用?IDE 没有告诉我这一点。调试时,我在OnTerminate事件中看不到活动线程。:-/

0 投票
1 回答
117 浏览

multithreading - 在 TThread 上创建 MainForm

我有一个导出 DLL 并具有library标题的 Delphi 2010 应用程序。它在 TThread 中创建 MainForm,如下所示:

每当我通过该LoadLibrary函数加载此 DLL 时,应用程序运行良好。(显然它使用我传递给LoadLibrary的线程作为主线程并且没有问题)

但是,如果我尝试通过更改选项 -> 应用程序中生成的输出来将此 DLL 导出到实际的 EXE。并将标头从 更改为library然后program构建它并执行输出 EXE 而不是通过 windows api 加载 DLL,应用程序在尝试创建表单时挂起,特别是在Application.CreateForm(MyForm, form);. 如果我从线程中删除应用程序初始化并将其放在主程序上,它运行得很好。

我试图呈现的表单只是一个空表单。有任何想法吗?

0 投票
0 回答
8 浏览

looper - java Threads - 如果我使用looper,我是否必须取消它们?

我想知道是否有必要在这个线程上调用一些取消机制,或者它是否会在 countDowntimer 为空后停止?让我们看一下我创建的运行 android countdownTimer 的线程:

0 投票
1 回答
127 浏览

delphi - 组件代码中的 TThread -Delphi 7

我创建了一个新组件来播放波形和 MP3 文件,该组件包含 Tprogressbar 和 Play Button 用于跟踪播放位置,我通过在循环内使用 TIdThreadComponent 实现了这一点,组件工作完美,但我想改用 TThread TIdThreadComponent 的,提前谢谢你..