能否在VC的DLL中实现多线程,在Delphi中使用?
能否在VC的DLL中实现多线程,在Delphi中使用?
比如: 在VC的DLL中开两个线程,一个负责接受数据,另一个负责处理这些数据。将处理的结果返回到Delphi中使用。
问题点数:100、回复次数:14Top
1 楼ychyzr(网游)回复于 2003-12-02 08:59:06 得分 0
哪位仁兄有例程可以发给我参考? chinayzr@hotmail.com 谢谢!Top
2 楼jxc163(一寒)回复于 2003-12-02 09:07:49 得分 0
如果有例程请发给我一份: jxc163@163.net
最好是纯Delphi的。Top
3 楼Rainsea(飞龙在天)回复于 2003-12-02 09:21:24 得分 10
使用事件就可以的。
SetEvent
ResetEvent
CreateEvent
Top
4 楼sundayboysII(空)回复于 2003-12-02 09:23:24 得分 10
呵呵,开线程我不清楚,我现在的项目vc的dll都是开定时器的,另外我们是文件交互的,也就是说dll生成结果文件,delphi开定时器去读取结果文件,当然改进的方法就是内存交互。Top
5 楼ychyzr(网游)回复于 2003-12-02 09:37:24 得分 0
to sundayboysII(空): 思路不错!
还有没有更好的办法?
可能很多朋友在开发中都遇到这样的问题,大家都进来讨论一下!Top
6 楼ychyzr(网游)回复于 2003-12-02 10:03:46 得分 0
to Rainsea(飞龙在天): 谢谢!能说详细点吗?Top
7 楼sundayboysII(空)回复于 2003-12-02 10:09:54 得分 10
他那个好像是用来同步事件的。Top
8 楼xogirl(xogirl)回复于 2003-12-02 10:20:13 得分 0
用SOCKET通信去取,VC做客户端,DELPHI这边做服务器端,VC有结果的话向DELPHI发出请求,响应ServerSocket1ClientRead事件Top
9 楼liyangyao970(纳兰容若)回复于 2003-12-02 10:38:40 得分 0
应可以的啊,替你顶哦Top
10 楼jhwh(弹剑长歌(搬个凳子来灌水))回复于 2003-12-02 11:08:41 得分 20
大体意思:在DLL中建立一个人工事件,进行读。读完,重置本事件,由delphi进行写。
如果只是同步单个的读写,用一个Mutex就行了,和Event差不多。
C:
HANDLE h;
h = CreateEvent(...,"TestEvent");
while (!stop)
{
WaitForEvent(h...)
ReadInfo( )
SetEvent( )
}
Delphi端:一个线程
TThread.Exec( )
var h:THandle;
begin
h := OpenEvent(...,'TestEvent' );
if h = 0 then exit;
while not Terminated do
begin
WaitForEvent(h...)
WriteInfo( );
SetEvent(h);
end;
end
Top
11 楼ychyzr(网游)回复于 2003-12-02 11:09:03 得分 0
我是用Delphi定时调用VC的DLL中的函数来取得DLL中的线程处理的结果的。请问怎么实现?Top
12 楼sundayboysII(空)回复于 2003-12-02 11:25:17 得分 20
如果你这样的要求就好实现多了,也就是让vc的dll开辟一个数组,然后提供方法返回数组中的内容。我的项目中vc写了一个ocx就是用来读取文件内容,这个ocx自己开辟了100个数组用来读取多个文件,然后提供GetFileInfo,IsLastFile,MoveNext等方法,我只要在定时器的for循环中调用GetFileInfo,然后判断IsLastFile,不是就MoveNext。Top
13 楼sundayboysII(空)回复于 2003-12-02 11:25:55 得分 0
哦,对了,还提供InFileSearch函数,让ocx去搜索文件。Top
14 楼Seahilly(小峰)回复于 2003-12-02 13:05:20 得分 30
可以实现,线程的处理与一般程序相同。但是:
1、要设计专门的创建线程为好,作为DLL函数输出;
2、在DLL做退场处理是要注意线程。
Top




