2 lijingyu1985 lijingyu1985 于 2013.11.27 20:34 提问

C#调用C++的DLL验证指纹问题

现在有一个动态链接库matlink.dll
其中有一方法:
int ZMatchTemplateOne(BYTE* pSrc,BYTE *pDst);
pSrc:指纹模板
pDst:指纹验证信息
在使用C调用时,没有任何问题,但是使用C#时,同样的指纹模板及指纹信息,在多线程调用时就会出现问题,主要是返回的指纹比对值不同。
谁可以帮助一下啊!
代码:
fingerIN = "指纹信息";
fingerINforByte = strToToHexByte(fingerIN);
fingerData = "指纹模板";
fingerDataforByte = strToToHexByte(fingerData);

多线程:
for (int a = 0; a < 线程数量;a++)
{
Thread th = new Thread(new ParameterizedThreadStart(fingerMatch));
th.IsBackground = true;
th.Start(a);
}

fingerMatch:
……
for (int i = 0; i < 比对次数;i++)
{
int res = ZMatchTemplateOne( fingerDataforByte, fingerINforByte);
}
……

如果把ZMatchTemplateOne方法加锁后,便不会出现问题,但是验证指纹数量太多,必须采用多线程处理,头疼,麻烦各位帮忙解决一下,谢谢了!
注:DLL是厂家提供的,没有具体的代码。但是厂家提供的程序是使用DELPHI写的,运行没有问题。。。唉

1个回答

u012908616
u012908616   2013.11.27 21:52
已采纳

用C语言调用或用Delphi调用没有线程问题吗? 如果没有的话, 那可以用C语言再封装一次嘛。
如果C语言在多线程调用时也有问题,那只能说厂家的DLL不支持多线程,联系厂家询问询问。

但真心觉得调用时加锁没什么大不了的,除非这个指纹验证算法巨慢无比,或者并发量实在太大(实际上多线程也就是能发挥多核CPU的优势而已),性能问题只有在压力测试或实际使用过程中出现问题时才有解决的必要。

如果前边的方案不灵或不可接受, 那你还可以搞多进程分布式。 即把验证指纹做成服务,通过SOAP、REST或者RPC等方法公开接口, 该服务可以运行多个实例, 每个实例都是独立的进程。 然后所有需要指纹验证的地方,都改为调用这个服务,调用时通过简单算法控制请求均匀分布到种个服务实例上就行了。

lijingyu1985
lijingyu1985 能不能提供一份简单的例子?没做过这方面的开发,不太了解,谢谢
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片