问题标签 [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 - Delphi webbrowser获取tthread对象中的所有链接
我无法在 tthread 对象中运行我的代码。它应该遍历 twebbrowser 中的所有链接,然后如果 url 包含“http://www.ebay.com/itm/”,则将其复制到备忘录中。该代码在 mainform 中完美运行,但在 tthread 对象中不起作用。
我的代码:
我得到的错误
模块 mshtml.dll 中地址 xxxxxx 的访问冲突
感谢阅读和所有回复。
c++ - 在非阻塞模式下的 TThread 中使用 TClientSocket 时,OnConnect 事件未触发
我正在尝试TClientSocket
在多线程 C++ Windows 应用程序中以非阻塞模式使用 Borlands 组件。我正在创建多个线程(派生自 的类TThread
),每个线程都创建自己的TClientSocket
对象。然后我分配线程类的成员函数作为套接字的OnConnect
,OnDisconnect
和事件的事件处理程序。OnSocketError
我在这里遇到的问题是,每当我TClientSocket::Open()
从函数内部调用TThread::Execute()
函数时,OnConnect
事件都不会触发。但是,当我在调用Open()
函数之前从 VCL 线程调用函数时TThread::Execute()
,所有事件都会触发,我可以根据需要使用线程-套接字组合。现在我还没有在文档中读到任何内容TClientSocket
在线程内使用时不应在非阻塞模式下使用,但在我看来,我尝试使用此类的方式在概念上可能存在问题。Borland 文档在这个主题上相当糟糕,这些组件现在已被弃用,因此很难获得可靠的信息。尽管已被弃用,但我必须使用它们,因为我拥有的 Builder 6 包中没有其他选择。任何人都可以告诉我是否有正确/错误的使用方式TThread
和非阻塞TClientSocket
组合。我从来没有在使用它作为 VCL 线程的一部分时遇到过问题,也从来没有遇到过使用 TServerSocket 的问题,我真的不明白为什么有些事件没有触发。
c++ - 使用多个 TClientSocket 实例导致 Windows 句柄泄漏的 C++ 应用程序
TClientSocket
我在使用 Borland/Embarcadero组件时遇到了明显的手柄泄漏。我有一个创建多个TThread
实例的应用程序,每个实例TClientSocket
动态创建一个对象,连接到它的目标发送一些消息,然后被删除。然后TThread
删除实例(使用FreeOnTerminate = true
)设置。我知道这效率低下,但它完美地满足了应用程序的需求——TThread
能够同时存在的最大实例数限制为 32。我看到的问题是我可以看到一个明显的 windows 句柄泄漏问题通过任务管理器。为了隔离问题,我在单线程意义上应用了相同的问题,只是动态创建了一个TClientSocket
对象并在主 VCL 线程中的单个循环内完成后再次删除它。这表现出相同的手柄泄漏问题。我知道该组件已被弃用,并且我知道我正在做的事情效率低下,但我不明白为什么会有句柄泄漏。在删除对象之前是否需要对对象执行任何操作TClientSocket
以消除此句柄泄漏,或者这是组件中的错误?我在非阻塞模式下使用套接字并将事件处理程序分配给OnConnect
OnDisconnect
和OnSocketError
。
delphi - 使用 FreeOnTerminate = True 对 TThread 进行 Delphi 单元测试
当 FreeOnTerminate = True 时,为 TThread 后代编写 Delphi DUnit 测试的最佳方法是什么?TThread 后代返回一个我需要测试的引用,但我不知道如何等待线程在测试中完成......
任何想法都会受到欢迎。
德尔福 2010。
delphi - 为什么 MessageBox 不会阻塞同步线程上的应用程序?
据我了解并知道 TThread 类的方法,如果您同步代码,它实际上会在主应用程序线程中执行(就像计时器/按钮单击/等)我一直在玩耍并注意到一个MessageBox 不会阻塞主应用程序,但是 sleep 会按预期进行。这是为什么?
multithreading - 终止线程变量并将其设置为 NULL
与TThread
后代一起工作时,我基本上有一个选择:
- 设置
FreeOnTerminate
为true
删除我的TThread
后代对象但不将其设置为NULL
- 手动完成并自己完成删除它的所有麻烦
我基本上需要的是一种确定线程是否正在运行的方法,所以我做了以下事情:
此代码按原样工作。我的问题是:
有没有办法简化这个?完成后我需要设置
MyThread
为 NULL,以便在下次调用启动/重新启动之前该对象不存在?这不能通过FreeOnTerminate
设置为 true 来完成,因为它会删除对象。我只能尝试访问然后生成异常的对象(我可以捕获但它是愚蠢的)。在初始化或重新启动之前,我真的只需要知道 MyThread 是否已完成执行。我可以在不终止线程的情况下重新启动线程吗(在程序完成之前我真的不需要删除对象) - 如果我启动线程,我会得到“无法在正在运行或挂起的线程上调用启动”异常。
delphi - 使用 TThread 构造函数释放 Pascal 2.6.2 错误
Free Pascal 2.6.2 编译器(使用 Delphi 模式)抱怨
带有此错误消息:
我用
这似乎是由 2.6.2 中的更改引起的,TThread 现在有一个带有可选第二个参数的构造函数声明:
delphi - 线程未在打开的非模态表单上执行
以下是“进度”表单的部分代码。
除了 ProgressBars(从代码中删除)之外,它还有一个 TLabel (LblDots),我想更改其中的标题(点数增加)。
在 FormShow/FormClose 中,TDotterThread 被创建和销毁。
问题:
我看到 Synchronize(DoUpdate) 过程仅在程序不做繁重工作时才调用更新标签。
这是进度表:
该表单的调用和创建方式如下:
我究竟做错了什么?
TIA
multithreading - 我什么时候需要在 TThread 中同步?
我知道您需要synchronize (yourprocedure)
设置例如标签的文本。但是关于:
- 阅读标签的文本。
- 切换/设置标签的启用属性。
- 调用其他标签程序/函数(例如 onclick 事件)。
当我需要使用时,是否有一个简单的规则可以知道/记住synchronize
?
PS.: 同步类似于 PostMessage/SendMessage 吗?
multithreading - Multiple TThread Instances
I have a TThread Class that can run independently and terminates and frees itself after it's done. I considered the termination and everything works. The problem is, that I would like to add a feature that the user can select and choose how many SYNCHRONOUS threads should be active at the same time. An example would be:
- The program has to do 100 total tasks!
- The user chooses 3 Threads should be running at the same time to complete all the tasks.
The first step I did was to create 3 instances of my TThread Class and the resume them in a for loop. So 3 threads are running. After the first thread is done (or terminated), another new instance needs to be created and resumed.
I get stuck on this point and I wonder how I can realize this. Any advice would be helpful.
Edit: Some Code