16 个解决方案
#1
#2
很简单,你的非托管dll中的引出函数不是线程安全的,比如这个函数可能在内部用了一个全局变量,如果多线程调用这个函数,则会导致全局变量的值非法而导致崩溃,c++写的程序很脆弱,稍微不对就会崩溃,
#3
你可以在互斥访问这个dll的函数,在调用这dll函数时,先lock一下,保证不会有多个线程同时调用一个函数,
#4
说的有道理!
不过,建议先不用多线程,测试这个dll,能否正常在C#中使用。。。
#5
单线程,可以播放,但是多线程就有问题,请大家帮忙下
#6
锁了,但是还是有问题,求原因啊
#7
你得跟踪下。
#8
你得跟踪下。
#9
怎么跟踪,能具体点嘛,很急啊
#10
怎么跟踪啊,能具体点嘛,很急啊
#11
怎么跟踪啊,能具体点嘛,很急啊
#12
你是怎么锁的?因为函数时全局的,lock的对象应该是一个static对象,
#13
你也可以用c++写个测试程序,在c++下用多线程访问这个dll,看是否有问题,
#14
LS解释得很清楚了
C++的那个函数执行时,出现了竞态条件问题
C++的那个函数执行时,出现了竞态条件问题
#15
顶顶帖子
#16
调用C++的DLL,单线程可以,而多线程又不行,简单就是Lock 一个静态变量,然后调用DLL。这样不行的话就是DLL不支持多线程调用了
#1
#2
很简单,你的非托管dll中的引出函数不是线程安全的,比如这个函数可能在内部用了一个全局变量,如果多线程调用这个函数,则会导致全局变量的值非法而导致崩溃,c++写的程序很脆弱,稍微不对就会崩溃,
#3
你可以在互斥访问这个dll的函数,在调用这dll函数时,先lock一下,保证不会有多个线程同时调用一个函数,
#4
说的有道理!
不过,建议先不用多线程,测试这个dll,能否正常在C#中使用。。。
#5
单线程,可以播放,但是多线程就有问题,请大家帮忙下
#6
锁了,但是还是有问题,求原因啊
#7
你得跟踪下。
#8
你得跟踪下。
#9
怎么跟踪,能具体点嘛,很急啊
#10
怎么跟踪啊,能具体点嘛,很急啊
#11
怎么跟踪啊,能具体点嘛,很急啊
#12
你是怎么锁的?因为函数时全局的,lock的对象应该是一个static对象,
#13
你也可以用c++写个测试程序,在c++下用多线程访问这个dll,看是否有问题,
#14
LS解释得很清楚了
C++的那个函数执行时,出现了竞态条件问题
C++的那个函数执行时,出现了竞态条件问题
#15
顶顶帖子
#16
调用C++的DLL,单线程可以,而多线程又不行,简单就是Lock 一个静态变量,然后调用DLL。这样不行的话就是DLL不支持多线程调用了