小编Igo*_*rMF的帖子

TListBox与TStringList同步

我有一个后台线程向主线程发送消息,反过来,它将消息添加到TListBox,如日志.

事实是,这个后台线程非常快,我真的不需要快速更新日志.我想将消息添加到TStringList并设置一个计时器来每秒更新TListBox.

我尝试过使用:

listBox1.Items := StringList1;
Run Code Online (Sandbox Code Playgroud)

要么

listBox1.Items.Assign(StringList1);
Run Code Online (Sandbox Code Playgroud)

在OnTimer事件中,它的工作原理.事实是,它永远不会让用户真正滚动或点击列表框,因为它每秒刷新一次.

我正在使用Delphi XE4

是否有更优雅的方式将列表框的内容与此背景StringList(或必要时的任何其他列表)同步?先感谢您!

delphi

5
推荐指数
1
解决办法
3421
查看次数

Delphi OmniThreadLibrary + OPC客户端

我正在一个单线程OPC客户端程序中工作,该程序管理连接到同一OPC服务器的3个不同的西门子PLC,也是西门子的.

单线程客户端看起来像这样:

loop
 begin
  processPLC1;
  processPLC2;
  processPLC3;
end;
Run Code Online (Sandbox Code Playgroud)

每个processPLC过程都会调用底层OPC库,例如:

 OPCutils.WriteOPCGroupItemValue(FGroupIf, FHandleItemOpc, Value);
Run Code Online (Sandbox Code Playgroud)

好的,现在我想在不同的线程中调用每个processPLC并且并行工作.

我做了一些研究,并使用OmniThreadLibrary开始了一些代码,但我不认为OPC代码是多线程安全的.是吗?

我应该使用task.Invoke或类似的东西吗?ReadOPC函数怎么样,返回PLC标签的值?这里最好的做法是什么?

谢谢!!!

delphi multithreading opc

3
推荐指数
1
解决办法
1263
查看次数

标签 统计

delphi ×2

multithreading ×1

opc ×1