vra*_*lex 4 delphi multithreading messages
我有一个程序从其他应用程序接收字符串消息并使用VCL解析它们.消息发送如下:
AtomId := GlobalAddAtom(PChar(s));
SendMessage(MyProgramHandle, WM_MSG, 0, AtomID);
GlobalDeleteAtom(AtomID);
Run Code Online (Sandbox Code Playgroud)
我的程序收到此消息,解析它一段时间,然后将控制权返回给应用程序.解析一条消息需要时间,因此其他应用程序的性能会恶化.
一种可能的解决方案是在其他线程中创建具有相同标题和相同类的表单,并重命名主表单的类.但据我所知,不建议在线程中创建表单.
那么,有什么方法可以改善性能?
典型的方法是创建工作线程(或工作线程池).主线程将继续接收消息,但不是解析它们,而是将它们添加到队列(例如链接列表).
工作线程获取队列中的第一个元素并对其进行处理.完成后,它返回队列以获取下一个元素.
由于队列是多个线程之间的共享资源,因此您必须控制对它的访问.互斥锁将确保在任何给定时间只有一个线程可以访问队列.
祝好运.
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |