lijingyu1985 2013-11-27 12:34 采纳率: 100%
浏览 2577
已采纳

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条回答

  • Todd_Pointer 2013-11-27 13:52
    关注

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题