谢绝回复!
解决方案 »
- 请教有关日志文件问题
- dll问题
- 有关输出到文本再输出到LPT1端口的问题(I/O 错误)
- HELP!!!关于Diamond Access控件的奇怪问题!!!!!!!!!!
- 大侠帮忙:Fastreport控件实现分组后如何再分页打印?
- 如何实现??想在Form1的DBGIRD里,当双击某一行数据时(Options.dgrowselect=True),会自动弹出一个Form2来,Form2里有几个Edit,依次显
- 怎么老出问题啊,CSDN?
- 很简单的问题……
- 有谁知道如何在delphi调用excel中的打印机按纽.
- 这个问题好难呀
- Delphi 如何调用C的开源库?
- win2003上的发布delphi开发的CGI模式的webserver出现错误!
当线程A调用DLL的创建对象函数时,对象被创建在线程A的堆栈中?还是进程的全局变量区?
结论如下:
1.在线程函数 内定义的变量 被分配在 本(自己)线程堆栈空间内,所以不用进行 线程同步处理
2.在线程函数 内使用全局变量 需要进行线程同步处理
3.在线程函数 内使用的全局变量,是线程变量,也可以不用进行线程同步处理
譬如:delphi可以用Threadvar 关键字定义
vc中可以使用__declspec(thread)根据以上测试结果,LZ的问题:
当线程A调用DLL的创建对象函数时,对象被创建在线程A的堆栈中?还是进程的全局变量区?
》》应该创建在 线程A的堆栈中 (创建的对象中必须没有对全局变量的引用)
完整代码不方便贴,比较多!
//类文件我先创建了一个单元,这个单元内包含一个类声明.单元名为proxyCust.pas
TproxyCust=class
private
public
end;
//DLL业务逻辑
uses
proxyCust;
TCust=class
private
FCust:TProxyCust;
procedure CreateProxyObject;
end;procedure TCust.CreateProxyObject
begin
FCust:=TproxyCust.Create;//如果我用多线程调用时,用不用同步
end;//线程调用DLL thread1.RequestDLL()
thread2.RequestDLL()
ok,那我总结一下!
//我用COM+
在客户端有N次Request后,COM+会自动对request进行维护(可能生成队列,不过我还是有点困惑,COM+真能把所有向COM+服务器的请求全部记录在它的申请队队列中?),开发人员仅需要考虑如何将业务DLL进行安全装载,这也就是一种异步处理!