问题标签 [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 投票
2 回答
2751 浏览

delphi - 如何正确使用 TThread

请问你能帮帮我吗。我正在编写一个组件(类似于 TListView),在我的组件中我一个一个地执行 3 个过程:

我无法理解如何让我的组件使用线程来执行所有这些过程,至少是第一个(findFiles)。我尝试了不同的方法,但没有任何结果。

这是我所拥有的内容(只是一个基本示例)。

然后才执行线程来设置适当的图标(SetIcons):

它工作但有错误:有时我的组件不是为所有项目创建图标,有时某些项目的图标完全填充为黑色,有时我根本没有图标;

然后我决定在线程中执行所有 3 个程序:

结果,我在创建图标时遇到了同样的错误,而不是在指定的文件夹中搜索,而是在我的应用程序所在的文件夹中搜索。

为了让您更了解我,我正在尝试编写一个具有多个选项卡的文件管理器,据我所知,我需要使用 Threads 以便应用程序在处理多个选项卡时不会冻结。

你能帮我理解如何安排我的代码吗?!!!!!!也许你可以举个例子,因为关于线程的文档并不多。


你好,我们又见面了。
我已经尝试过 AsyncCalls 和 OmniThreadLibrary。他们都有一个“背景”文件搜索的例子。首先,我发现 AsyncCalls 更适合我的应用程序,因为它确实做得很好。我使用 AsyncCalls 来执行我的三个过程,这正是我一直在寻找的。我还尝试使用 OmniThreadLibrary 调用我的程序,但它们似乎不是在线程中执行的。这就是为什么我更喜欢 AsyncCalls,但我有一个问题,如何在 IAsyncCall 运行时停止它?我的意思是,例如,正如我之前提到的,我的应用程序是多选项卡,如果用户打开 3 个选项卡并在每个选项卡上执行文件搜索,那么如何停止在第二个选项卡上进行文件搜索?

为了让您更清楚地了解我想要做什么,这里有一个草图:

一个表格有3个TMemo,3个TButton

除了指向不同的 TMemo(Memo1、Memo2、Memo3)之外,所有三个按钮的作用都相同;

因此,如果我单击所有三个按钮,我将运行 3 个 IAsyncCall。如何在它们仍在运行时停止它们?

0 投票
4 回答
3215 浏览

multithreading - 暂停线程的执行而不睡觉?

我正在使用 Skype API,它每次收到一条消息时都会发回一条消息。我不确定这是否真的导致它的原因,但它是我能得到的最接近的:当我发送太多消息时,COM 控件无法处理所有回复,这会导致整个应用程序崩溃。当我使用for循环时会发生这种情况。

我正在使用线程来完成这项工作,所以我的程序不会挂起。我知道我可以Sleep();在线程中做,并且不会(不应该)让整个程序休眠。但问题是,我的 COM 控件也将处于休眠状态,因此它仍然无法处理它需要的任何内容,因此它可以再次跟上。

所以,问题是:如何在不暂停整个线程的情况下暂停例程,以便我的 COM 对象可以处理回复,而不会重载?

0 投票
6 回答
4559 浏览

multithreading - 在 TThread 执行中引发异常?

我刚刚意识到我的异常没有在我的线程中显示给用户!

起初我在我的线程中使用它来引发异常,但它不起作用:

IDE 向我显示了异常,但我的应用程序没有!

我四处寻找解决方案,这就是我发现的:

Delphi线程异常机制

http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_22039681.html

这些都不适合我。

这是我的线程单元:

如果您需要更多信息,请告诉我。

同样:IDE 捕获所有异常,但我的程序没有显示它们。

编辑:这是 Cosmin 的解决方案最终奏效了 - 最初没有奏效的原因是因为我没有添加 ErrMsg 变量,而是我只是将变量包含的任何内容放入 Synchronize 中,这是行不通的,但是我不知道为什么。当我没有其他想法时,我意识到了这一点,我只是搞砸了解决方案。

和往常一样,笑话在我身上。=P

0 投票
2 回答
456 浏览

multithreading - 如何传递或使公共变量或字段可供 Tthread 访问?

我正在使用 Delphi Prism 为 Mono 编写和构建我的软件。所以,我决定我的串行通信将由一个线程处理。由于除非您为项目启用全局变量选项,否则严格不允许使用全局变量,因此我决定遵循 Delphi Prism 约定。那么,如何传递或使公共变量或字段可供线程访问?

这是我的测试主窗体代码:

这是串行通信的线程:

以下是 ThreadComm 的运行方式:

每次我编译代码时,它都会引发 30 条左右类似的错误消息,说明如下:

没有实例引用就无法调用实例成员“SerialPort1”

我知道错误的含义,但解决它的唯一方法是创建主窗体的实例。如果你这样做,那么它将与主程序的实例不同。如果是这种情况,那么当您需要访问它的字段或公共变量时,您将不得不一直创建新的 mainform 实例。正确的?

我想使用所有这些变量都在线程中,并且它们恰好在主窗体公共区域内。

谢谢

0 投票
2 回答
311 浏览

multithreading - 除非中间有 MessageBox,否则 TThread 不会做它的工作!

我创建了一个 TThread 类来执行一些套接字操作,问题是,除非我向其中添加 MessageBox,否则代码不起作用,除非我在它之前放置 MessageBox 调用,否则套接字将不起作用

0 投票
2 回答
1804 浏览

c++ - TThread 访问违反终止/免费

我正在运行一小段代码,这些代码偶尔会(很少)在我的 TThread 的终止/释放时违反访问权限。我正在运行这些线程的许多实例,但这个地方似乎是唯一导致问题的地方,而且它每 500 次左右调用才这样做一次。

它被扔进了我的最后。我的第一个猜测是 WaitForSingleObject 以一种奇怪的方式超时并导致 Terminate 和 Free 搞砸了,但我不太确定这是怎么发生的。当我从 TThread 继承时,我没有更改与 Terminate/Free 方法有关的任何内容。

任何人都知道在这么少的代码之后可能导致这两种方法访问冲突的原因是什么?

0 投票
5 回答
2776 浏览

multithreading - 如何实现使用最少资源定期检查某些内容的线程?

我想在后台运行一个线程,它将检查与给定时间间隔的某些服务器的连接。例如每 5 秒。

我不知道这是否有一个好的“设计模式”?如果我没记错的话,我在某个地方读到过它的执行方法中的休眠线程并不好。但我可能错了。

另外,我可以使用普通的 TThread 类或 OTL 线程库。

有任何想法吗?

谢谢。

0 投票
2 回答
3862 浏览

multithreading - Delphi:TThreadList 有时会锁定程序

有时这个功能会锁定我的程序,并且在我关闭它之前它会冻结。这里有什么问题?

班上

我正在像这样添加到列表中:

全局列表是一个全局变量

0 投票
2 回答
15274 浏览

delphi - 线程错误:尝试释放挂起的线程时句柄无效 (6)

在给定的示例中,我在调用时收到异常AThread.Free.

我有两个问题:

  1. 在给定的示例中,我应该如何释放AThread实例TThread

  2. 我不明白,为什么在自我毁灭之前TThread.Destroy调用Resume。这有什么意义?

0 投票
1 回答
406 浏览

c++ - Borland C++ 到 Cygwin C++:TThreads 到 pthreads?

我正在做一个项目,我需要消除对 Borland C++ 编译器的所有引用(我为什么这样做不是问题:))并且到目前为止相对成功。

但是,我有一个扩展了 Borland 线程类 TThreads 的类。我想改用 pthreads,但我不太确定 pthreads 是否可以扩展。

如果有人对扩展 pthread 类或什至从 Borland 转换为非 Borland 有任何有用的花絮,我将不胜感激!