Raf*_*cci 6 delphi dll multithreading
我有一个Delphi DLL,我想在我的应用程序内部加载一个线程(不止一个,确切地说).DLL只是创建一个对象,然后它使用它并销毁它.从这个角度来看,DLL代码是线程安全的.
但是如果我在一个线程中加载该DLL会发生什么?DLL仍然是线程安全的吗?关于加载DLL的线程,我应该知道什么?我已经看到VCL具有在创建线程时设置的IsMultThread属性,但是dll会得到关于此的通知,还是应该手动执行?
Dav*_*nan 12
最常见的陷阱是使用全局变量.只要您不使用任何全局变量(或正确地同步访问您使用的变量),您将对线程安全起到很大的作用.
IsMultiThread例如,内存管理器使用它来在单线程情况下进行优化.我个人认为这几天不值得优化,因为几乎所有有用的代码都有一些描述的线程.我只是IsMultiThread在DLL的开头设置为True,例如在DLL .dpr文件的begin/ end块中,或者在你单元的一个初始化部分中设置为相同的东西.
要直接回答您的问题,IsMultiThread除非您在该DLL中创建一个线程,否则DLL中的实例将不会设置为true.由于您在EXE中创建线程,因此需要在DLL中自己完成.
更一般地说,在不知道代码的线程安全性以及线程安全的实际意义的情况下,根本不可能对代码的线程安全性说太多.后一点可能听起来很奇怪,但我所指的是Eric Lippert所着名的问题,你称之为"线程安全"的东西是什么?文章.
设置IsMultiThread为True库项目主块中的第一件事:
library MyLibrary;
begin
IsMultiThread := True;
...
end.
Run Code Online (Sandbox Code Playgroud)
这将指示内存管理器使用线程安全的分配/取消分配例程。
| 归档时间: |
|
| 查看次数: |
4823 次 |
| 最近记录: |