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

delphi - Jpeg 在 TThread 中保存到 base64

我对Delphi有一些问题。

我编写了两个简单的函数来制作屏幕截图,将其转换为 jpeg 并解码为 base64 流。如果我在主流节目中制作它,它的效果很好。但是如果我创建一个 TThread 类并在 Execute 上启动这个函数,Windows 会冻结,我只能重新启动我的电脑。

通过多次尝试,我发现通过程序挂起 PCJpegImg.SaveToStream(Input); 如果我不将位图转换为 jpeg,它的效果很好,我得到了图像字符串。

请帮忙。

这里有一个代码

0 投票
1 回答
3153 浏览

delphi - Delphi - Can a TThread change the value of variable in main VCL thread?

Using: Delphi XE2, Windows VCL Forms application

Can a TThread during its execution change the value of a variable in the main VCL thread?

The need is to update an Integer which is declared as a field of the TForm class. It will be passed to the TThread as a var variable in an overloaded (and reintroduce) Create constructor method.

Are there any fallbacks in this?

0 投票
4 回答
3007 浏览

delphi - 等待 TThread 实例启动的正确方法是什么

TThread实例创建和启动之间,主线程将继续执行代码。如果主线程中的代码依赖于有问题的线程完全启动并运行,它必须以某种方式等待线程Execute方法实际启动。

考虑以下代码:

如果没有等待IsRunning标志的循环,DoAction将无法成功将消息发布到包含的窗口句柄,因为它尚未创建。基本上不会触发inc(Test)里面的。WndProc

有没有更好的方法来等待线程启动并在Execute方法内部完成必要的初始化,或者这个解决方案是否尽可能好?

注意:我知道这不是线程安全的AllocateHWndDeallocateHWnd不应该像上面的例子一样在生产代码中使用。

0 投票
0 回答
115 浏览

multithreading - 如果连接到 GUI 控件,TDataSet 异步加载线程是否安全?

我想使用 TThread 后代异步加载 TDataSet 中的数据。如果我错了,请纠正我,但我想如果数据集没有连接到任何 GUI 控件,则不会有任何问题,但是.. 如果 TDataSet 链接到 TDataSource 链接到 GUI 控件怎么办?需要 myThread.synchronize 吗?

0 投票
1 回答
333 浏览

multithreading - Delphi - 未创建自定义线程

我这里有点问题。我有一个继承 TPersistent 类的自定义类,在这个自定义类内部(私有部分),我有一个自定义的 TThread,它具有覆盖的 Execute 方法,每(1000 毫秒)触发一次。一切都很好,直到我将我的 2 个自定义类移动到一个新单元......

上面的代码在主项目单元中工作得很好,但是当我将它移动到一个新单元时,线程代码不再工作,当我尝试释放一个 TMyClass 对象时,我得到一个 AV。我认为线程根本没有被构建,这就是为什么我在尝试释放它时得到一个 AV ......但为什么呢?代码在哪个单元中并不重要...

单元1:

单元2:

0 投票
1 回答
1445 浏览

delphi - Delphi 线程不运行

我正在尝试搜索所有子文件夹中的所有文件,因此它需要很长时间并且应用程序停止响应,所以我使用Thread(这是第一次使用Threads)我阅读了它,我找到了这种创建和执行线程的方法,但没有任何反应当我调用线程时,我不明白为什么我不能在主窗体上使用添加的组件,我不得不再次重新声明它?
我在这里想念什么?

0 投票
2 回答
199 浏览

multithreading - 为什么循环变量的值没有存储在动态创建的 AnonymousThread 中

我对如何将唯一标识符存储在动态创建的TThread.

我创建了这样的东西:

我可以将唯一标识符传递给动态创建的线程,以便它可以在其同步方法中显示它吗?

0 投票
1 回答
116 浏览

delphi - 如何捕获突然破坏的 TThread

我正在使用 TThread 开发软件。最近遇到一个问题,程序启动几天后TThread突然被破坏。

在 TThread 中,线程使用 Synchronize() 方法更改表单(例如 TLables)的显示。我想知道这可能会导致一些问题。

我正在记录线程中的几个部分,以便找出问题的原因。但是查看日志,却发现突然调用了TThread的析构函数。

TThread 的 FreeOnTerminate 设置为 true。

该程序运行两个线程。只有一个线程突然被破坏,而另一个线程在问题发生后仍在工作。

我正在寻找如何找出这种问题的原因的方法。

0 投票
1 回答
1121 浏览

multithreading - 使用 TThread.Resume 有什么问题?

很久以前,当我开始在 Delphi 中使用线程时,我通过TThread.Resume在构造函数的末尾调用来让线程自己启动,并且仍然这样做,如下所示:

从那时起,Resume已被弃用,Start取而代之的是。但是,Start只能从线程外部调用,不能从构造函数内部调用。

我继续使用Resume如上所示设计我的线程,尽管我知道它已被弃用 - 只是因为我不想Start从线程外部调用。我觉得不得不打电话有点乱:

问题:进行此更改的原因是什么?我的意思是Resume,他们希望我们使用的使用有什么问题Start

编辑在 Sedat 的回答之后,我想这真的取决于在构造函数中线程何时真正开始执行。

0 投票
2 回答
833 浏览

multithreading - 使用属性“暂停”线程

我有一个 TThread 对象,希望能够通过程序主窗体上的按钮启动/停止线程。我一直在寻找方法来做到这一点,到目前为止,我有以下想法:

  1. 当用户单击停止时终止并释放线程,并在单击开始时创建一个新线程。
  2. 使用 sleep 来延迟线程(我不想这样做)
  3. 有一个布尔属性来确定线程是否暂停。Execute 中的代码仅在此布尔值为 false 时才会发生。

我倾向于#3。在主窗体的 TThread 对象上设置布尔属性是否是线程安全的?

我应该选择这些选项中的哪一个或更好的选择?这是我第一次使用线程,所以任何帮助表示赞赏。