问题标签 [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 回答
1770 浏览

multithreading - TThread 和 COM -“尚未调用 CoInitialize”,尽管在构造函数中调用了 CoInitialize

我正在尝试在线程中使用 COM 接口。根据我的阅读,我必须CoInitialize/CoUninitialize在每个线程中调用。

虽然这工作正常:

当我将调用移至构造函数和析构函数时:

我得到EOleException: CoInitialize has not been called异常,我不知道为什么。

0 投票
0 回答
338 浏览

delphi - TThread内存泄漏中的奇怪BitBlt

我有一个简单的程序,它每秒截取几次屏幕截图。我创建了一个简单的代码来执行此操作,我可以根据需要多次运行它并且它工作正常。但是当我将相同的代码放入一个线程并运行它时,内存使用量开始上升,直到应用程序耗尽资源(大约 10 秒),然后线程当然会卡住。

为了测试,我有一个带有两个按钮的表单。一个运行上述代码,第二个启动一个运行相同代码的线程。我什至可以在第一个按钮上按住 Enter 键并且没有内存泄漏,但是当我单击第二个按钮时,线程会立即不断增加内存使用量(我什至可以使用 stop_thread 变量停止它,但内存使用量仍然很高)。

我知道问题与 BitBlt 线有关,因为没有它就没有内存泄漏。但我不明白发生了什么以及为什么发生。以及为什么当代码从主线程运行时没有发生。即使我将 Button1 代码放入一个循环并从主线程无休止地运行它,内存使用率仍然很低。有什么不同?

感谢您的任何建议!

0 投票
3 回答
1650 浏览

delphi-xe2 - TThread.CreateAnonymousThread 的奇怪行为

我无法理解它是如何工作的。

首先一个非常简单的例子,试图更好地解释我的情况。此代码位于新项目中创建的新表单 Form1 中。mmo1 是一个备忘录组件。

然后我有一个带有此事件的按钮:

我在备忘录上的输出是:
线程 4
线程 4
线程 4

我真的不明白。

第一个问题:为什么“名称”输出是:线程 4?是从 1 到 3 的 For 循环。至少应该是 1 或 3

:为什么它只执行最后一个线程“线程 4”,而不是依次执行“线程 1”、“线程 2”、“线程 3”3 次?

为什么我要问这个?我有一个对象已经有一个正常工作的过程。但是现在我发现我需要处理这个对象的列表。当然可以一个一个地工作,但在我的情况下,它们是彼此独立的,所以我想“嗯,让我们把它们放在线程中,这样它会运行得更快”。

为了避免修改对象以扩展TThread并覆盖Execute,我查找了如何使用过程而不是从 TThread 继承并找到匿名线程的对象来执行线程。对一个对象非常有效,但是当我尝试遍历我的对象列表时,会发生奇怪的行为。

这具有相同的效果。

当然我没有清理对象,这只是我正在运行的一些测试。有任何想法吗?或者在这种情况下,我需要从TThread继承并覆盖Execute方法?

有趣的是,运行得很好。

输出:
  线程 1
  线程 2
  线程 3

0 投票
0 回答
142 浏览

delphi - 从线程 delphi 添加到列表框或备忘录

为什么执行此线程时无法添加到列表框或备忘录?我也无法读取表单组件,例如TEdit,我得到空字符串?我试图将线程置于同步中,但它也不起作用。发送 HTTP 请求时,我需要使用线程来停止应用程序冻结。我的错在哪里?

在这里,我如何调用线程:

0 投票
0 回答
39 浏览

c++ - 使用 std::map在 TThread 的对象中导致访问冲突

我正在尝试使用 TThreads 并行化模拟模型。每个模型对象都包括一个std::map<obj*, int>. 只要只有一个线程在运行,模型就可以正常运行。如果第二个线程启动,我会在第一个线程的模型映射中遇到访问冲突。

为了测试地图是否真的有问题,我将其替换为std::vector<pair<obj*, int> >. 这很好用,但速度要慢得多,因为每次尝试查找特定的obj*.

我知道不可能为地图保留内存,因此我不知道如何在没有访问冲突的情况下使用地图。

0 投票
0 回答
129 浏览

delphi - 使用 TTHread 同时打开更多 ClientDataSet

我是delphi中线程的初学者。我写了这段代码,它工作得很好。

它从打开 ClientDataSet1 开始,直到完成,然后打开 ClientDataSet2,依此类推。

我的问题是:如何同时开始打开它们。

请帮我。

0 投票
1 回答
125 浏览

multithreading - delphi xe2正确处理从线程创建的指针,该指针正在发送到主线程

我想问几个问题,让我先给你解释一下,你可以看到这篇文章下面的问题。我创建了一个多线程应用程序,它从数据库中读取和更新数据。线程使用 sendmessage 与主线程通信。我将指针 TRecord 传递给 sendmessage 并将指针放在主线程中。以下是显示流程结构的代码片段:

这是扩展 TThread 类的执行事件。除非线程被暂停或终止,否则它将连续运行。

这是从线程接收消息的事件。

该应用程序将用作将始终连续运行的服务类型应用程序。

问题:
1. 我是否正确处理指针?
2.当我在应用程序运行时检查我的任务管理器时,我观察到在进程选项卡下,我注意到内存(私人工作集)不断增加。这样好吗?

问候所有人

0 投票
1 回答
1252 浏览

indy10 - 在表单关闭时停止线程并断开 in​​dy tcp 客户端

我确实编写了一个应用程序,它使用 Indy 10 TCP/IP 客户端和TThread. 该应用程序在事件时连接到服务器并在Form.OnCreate事件时断开与它的连接Form.OnClose。与服务器的连接是在TThread.

当我在以太网电缆断开连接的情况下启动应用程序并尝试关闭应用程序直到连接超时时,我确实得到了这两个异常:

  • Socket.Error #10038 非套接字上的套接字操作。
  • 线程错误:句柄无效(6)。

如果我在连接到客户端时尝试关闭应用程序,那么我只会得到这个异常:

  • 线程错误:句柄无效(6)。

如果我在线程执行睡眠时关闭应用程序,那么我不会得到任何异常。

我做错了什么,或者这是正常行为?

TThread班级代码:

Form.OnCreate代码:

Form.OnClose代码:

线程执行代码:

0 投票
1 回答
369 浏览

tthread - Delphi - Threadvar和线程私有变量之间的差异

在 Delphi 中,'Threadvar'(每个线程可用的变量的私有副本)和在 Thread'private' 部分中声明的变量之间的区别是什么,例如:

在后一种情况下,每个线程都应该有一个单独的 FValue 副本。

0 投票
0 回答
127 浏览

delphi - 我应该使用临界区还是同步/队列来修改类数据成员?

假设TForm1类(默认主窗口)包含数据成员int x;TThread如果我从后代创建额外的线程,我应该使用临界区对象还是同步/队列方法来修改x内部线程的Execute方法的值?

我知道当线程对 VCL 组件进行更改时会使用同步/队列。但是,这是否也适用于这里只是因为x在 VCL 中声明TForm1或者我可以简单地使用临界区对象来代替?