问题标签 [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.
visual-c++ - 用什么代替 TThread
我有用 Borland C++ 编写的 USB 通信源代码(“USBThread 类”),并使用 Visual Component Library(“vcl.h”)。现在我的任务是将它移植到 Visual C++,因为我们没有购买 Borland C++。
但是这个“USBThread 类”继承自“vcl.h”中的一个基类,称为“TThread”。
请问,在Visual C++中,我可以用什么样的基类来代替“TThread”作为新的继承源?
原始代码使用了TThread 来的“WaitFor”和“Terminate”方法,我不知道如何用Visual C++ 实现这两种方法。
谢谢!
delphi - 不会释放所有内存的 TStringList 和 TThread
使用的版本: Delphi 7。
我正在开发一个在 Virtual ListView 上执行简单for循环的程序。数据存储在以下记录中:
项目是索引。SubItem1操作的状态(成功与否)。SubItem2文件的路径。for循环加载每个文件,执行一些操作,然后保存它。操作发生在 TStringList 中。每个文件大约 2mb。
现在,如果我在主窗体上进行操作,它会完美运行。
多线程,存在巨大的内存问题。不知何故, TStringList 似乎没有被完全释放。在 3-4k 个文件之后,我得到一个 EOutofMemory 异常。有时,软件卡在 500-600mb,有时则没有。在任何情况下,TStringList 总是返回一个 EOutofMemory 异常并且不能再加载任何文件。在具有更多内存的计算机上,获取异常需要更长的时间。
其他组件也会发生同样的事情。例如,如果我使用Synapse 的THTTPSend ,那么一段时间后,软件无法创建任何新线程,因为内存消耗太高。它大约是 500-600mb,而最大应该是 100mb。在主窗体上,一切正常。
我想错误在我这边。也许我对线程的了解不够。我试图在Destroy事件中释放所有东西。我尝试了 FreeAndNil程序。我一次只尝试一个线程。我尝试手动释放线程(没有FreeOnTerminate ...)
没运气。
所以这里是线程代码。这只是基本的想法;不是所有操作的完整代码。如果我删除LoadFile prodecure,一切正常。根据线程池为每个文件创建一个线程。
可能是什么问题呢?
我一度认为,可能创建了太多线程。如果用户加载 100 万个文件,那么最终将创建 100 万个线程——尽管只有 50 个线程同时被创建和运行。
感谢您的输入。
multithreading - 如何防止冻结MainForm并等待子线程的返回值
我有线程在哪里下载 xml 文件和我想在其他类中解析的这个 xml 文件。现在我有准备线程,我可以在哪里下载它。在 MainForm 中我使用的是 WaitForSingleObject,但是这个函数冻结了 MainFrom,那么我怎样才能防止 reezing 并等待值呢?谢谢。
delphi - 如何让 TThread 继续在后台工作并在 Listbox 中显示结果?
我必须开发一个程序来根据我给出的 Select 语句继续观察数据库中的值
监视的值可以随时更改,我的程序必须根据我给出的 select 语句的结果来感知更改
我想通过使用 TThread 来查看选择结果,因为我的系统还具有其他功能,并且用户需要对其进行处理,而不仅仅是查看值。
如何在 Delphi XE2 中使用 TThread
我正在使用 VCL ...没有 .Net
问候。
multithreading - Delphi (XE2) Indy (10) 多线程 Ping
我有一个有 60 台计算机/设备的房间(40 台计算机和 20 台基于 Windows CE 的示波器),我想知道使用 ping 的每个人都还活着。首先,我编写了一个标准 ping(请参见此处Delphi Indy Ping Error 10040),它现在工作正常,但在大多数计算机离线时需要很长时间。
所以我想做的是写一个多线程平,但我很挣扎。我在互联网上只看到很少的例子,没有人符合我的需求,这就是我尝试自己写的原因。
我使用 XE2 和 Indy 10,表单仅由备忘录和按钮组成。
我的问题是,当我取消注释“sleep(10)”时,它“似乎”可以工作,并且“似乎”没有它就无法工作。这肯定意味着我在我写的线程中遗漏了一点。
换句话说。当 Sleep(10) 在代码中时。每次我单击按钮以检查连接时,结果都是正确的。
没有睡眠(10),它“大部分”时间都在工作,但有时结果是错误的线。
欢迎任何评论或帮助。
----- 编辑/重要 -----
作为对这个问题的一般跟进,@Darian Miller 在这里https://code.google.com/p/delphi-stackoverflow/开始了一个谷歌代码项目, 这是一个工作基础。我将他的答案标记为“已接受的答案”,但用户应该参考这个开源项目(所有功劳归他所有),因为它肯定会在未来得到扩展和更新。
multithreading - 在 TThread 派生类中重新创建 TThread
我创建了一个从 TThread 类派生的新类,在构造函数上我调用“inherited Create(True);”,然后调用“Resume()”,因为我已经覆盖了 Execute() 调用,现在我想调用 Execute( ) (再次运行线程)而不破坏类实例,所以我在新类中有一个名为“myRestart()”的函数,它调用“继承的 Create(True);” 并使我能够再次调用“Resume()”并且线程再次工作。
我的问题是,这是一种安全的做法吗?如果我有这个类的多个实例,它也会起作用吗?或者有更好的方法吗?
谢谢
delphi - 如何在后台线程中使用 LoadKeyboardLayout?
我正在使用LoadKeyboardLayout函数以这种方式加载和激活键盘布局:
它工作得很好,但它会冻结活动表单 1-2 秒,因为此更改需要一些时间。为了防止这种情况,我已将此代码移至这样的后台线程:
然后我以这种方式运行这个后台线程:
问题是,它没有按预期改变键盘布局。我已经调试了代码并且所有的行都被执行了;只是LoadKeyboardLayout功能还没有发挥作用。
如何使LoadKeyboardLayout函数从后台线程工作?
delphi - Indy 10首先在delphi中从服务器开始通信
在 TCPServer/Client 组件编写的 Socket 应用程序中,通常我们激活服务器端,然后将客户端连接到服务器,当我们需要从一侧获取或发送数据到另一侧时,首先我们从客户端向服务器发送命令,然后进行通信开始。
但问题是我们总是需要从客户端开始对话!
我想问一下在没有客户端请求的情况下从服务器端随机开始对话有什么想法吗?
我需要这个功能来从服务器端通知客户端。例如,当注册用户(客户端)连接到服务器时,其他连接的用户(在其他客户端),必须从服务器发送通知给所有用户(如雅虎通)。
我正在使用TIdCmdTCPServer和TIdTCPClient组件
delphi - 与 TThread.Synchronize 和 DLL 的访问冲突
我正在使用 DelphiPraxis 的 WorkerThread 和 Delphi XE2。 http://www.delphipraxis.net/93835-workerthread-der-diener-im-hintergrund.html 在我的 JobThread 中,我正在加载一个 DLL,它会等待(用于测试..)
“StatusCallback”是对正在加载 DLL 的线程中的过程的引用:
我的回调如下所示:
哪个电话:
OnStatus 事件处理程序:
我认为这个问题在某种程度上与 DLL 无法与 MainThread 同步有关。关于解决 Synchronize 的任何想法(如果它实际上是问题)?
multithreading - 用于图像处理的同步线程 Delphi
我必须以主要形式处理一张图像,但是对于我使用线程的 inc 速度来说,处理速度很低......
我的线程代码:
我正在使用它timer
:
但我DoWritePix
在运行时出错:
我的问题:这种方式对于以主要形式编辑图像是否正确?如果不是什么是正确的方式访问和写入线程?如果是,我该如何解决问题?