问题标签 [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.
delphi - Jpeg 在 TThread 中保存到 base64
我对Delphi有一些问题。
我编写了两个简单的函数来制作屏幕截图,将其转换为 jpeg 并解码为 base64 流。如果我在主流节目中制作它,它的效果很好。但是如果我创建一个 TThread 类并在 Execute 上启动这个函数,Windows 会冻结,我只能重新启动我的电脑。
通过多次尝试,我发现通过程序挂起 PCJpegImg.SaveToStream(Input);
如果我不将位图转换为 jpeg,它的效果很好,我得到了图像字符串。
请帮忙。
这里有一个代码
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?
delphi - 等待 TThread 实例启动的正确方法是什么
在TThread
实例创建和启动之间,主线程将继续执行代码。如果主线程中的代码依赖于有问题的线程完全启动并运行,它必须以某种方式等待线程Execute
方法实际启动。
考虑以下代码:
如果没有等待IsRunning
标志的循环,DoAction
将无法成功将消息发布到包含的窗口句柄,因为它尚未创建。基本上不会触发inc(Test)
里面的。WndProc
有没有更好的方法来等待线程启动并在Execute
方法内部完成必要的初始化,或者这个解决方案是否尽可能好?
注意:我知道这不是线程安全的AllocateHWnd
,DeallocateHWnd
不应该像上面的例子一样在生产代码中使用。
multithreading - 如果连接到 GUI 控件,TDataSet 异步加载线程是否安全?
我想使用 TThread 后代异步加载 TDataSet 中的数据。如果我错了,请纠正我,但我想如果数据集没有连接到任何 GUI 控件,则不会有任何问题,但是.. 如果 TDataSet 链接到 TDataSource 链接到 GUI 控件怎么办?需要 myThread.synchronize 吗?
multithreading - Delphi - 未创建自定义线程
我这里有点问题。我有一个继承 TPersistent 类的自定义类,在这个自定义类内部(私有部分),我有一个自定义的 TThread,它具有覆盖的 Execute 方法,每(1000 毫秒)触发一次。一切都很好,直到我将我的 2 个自定义类移动到一个新单元......
上面的代码在主项目单元中工作得很好,但是当我将它移动到一个新单元时,线程代码不再工作,当我尝试释放一个 TMyClass 对象时,我得到一个 AV。我认为线程根本没有被构建,这就是为什么我在尝试释放它时得到一个 AV ......但为什么呢?代码在哪个单元中并不重要...
单元1:
单元2:
delphi - Delphi 线程不运行
我正在尝试搜索所有子文件夹中的所有文件,因此它需要很长时间并且应用程序停止响应,所以我使用Thread
(这是第一次使用Threads
)我阅读了它,我找到了这种创建和执行线程的方法,但没有任何反应当我调用线程时,我不明白为什么我不能在主窗体上使用添加的组件,我不得不再次重新声明它?
我在这里想念什么?
multithreading - 为什么循环变量的值没有存储在动态创建的 AnonymousThread 中
我对如何将唯一标识符存储在动态创建的TThread
.
我创建了这样的东西:
我可以将唯一标识符传递给动态创建的线程,以便它可以在其同步方法中显示它吗?
delphi - 如何捕获突然破坏的 TThread
我正在使用 TThread 开发软件。最近遇到一个问题,程序启动几天后TThread突然被破坏。
在 TThread 中,线程使用 Synchronize() 方法更改表单(例如 TLables)的显示。我想知道这可能会导致一些问题。
我正在记录线程中的几个部分,以便找出问题的原因。但是查看日志,却发现突然调用了TThread的析构函数。
TThread 的 FreeOnTerminate 设置为 true。
该程序运行两个线程。只有一个线程突然被破坏,而另一个线程在问题发生后仍在工作。
我正在寻找如何找出这种问题的原因的方法。
multithreading - 使用 TThread.Resume 有什么问题?
很久以前,当我开始在 Delphi 中使用线程时,我通过TThread.Resume
在构造函数的末尾调用来让线程自己启动,并且仍然这样做,如下所示:
从那时起,Resume
已被弃用,Start
取而代之的是。但是,Start
只能从线程外部调用,不能从构造函数内部调用。
我继续使用Resume
如上所示设计我的线程,尽管我知道它已被弃用 - 只是因为我不想Start
从线程外部调用。我觉得不得不打电话有点乱:
问题:进行此更改的原因是什么?我的意思是Resume
,他们希望我们使用的使用有什么问题Start
?
编辑在 Sedat 的回答之后,我想这真的取决于在构造函数中线程何时真正开始执行。
multithreading - 使用属性“暂停”线程
我有一个 TThread 对象,希望能够通过程序主窗体上的按钮启动/停止线程。我一直在寻找方法来做到这一点,到目前为止,我有以下想法:
- 当用户单击停止时终止并释放线程,并在单击开始时创建一个新线程。
- 使用 sleep 来延迟线程(我不想这样做)
- 有一个布尔属性来确定线程是否暂停。Execute 中的代码仅在此布尔值为 false 时才会发生。
我倾向于#3。在主窗体的 TThread 对象上设置布尔属性是否是线程安全的?
我应该选择这些选项中的哪一个或更好的选择?这是我第一次使用线程,所以任何帮助表示赞赏。