首页 > 代码库 > LibUsbDotNet中的USB通知事件是不是线程安全?
LibUsbDotNet中的USB通知事件是不是线程安全?
使用LibUsbDotNet做了一个项目,测试的时候测试人员做了一个用例就是快速插拔USB。因为程序中对USB设备的打开和关闭都是在USB通知事件中做的,所以如果USB插拔通知事件不是线程安全的,那么在多线程中关闭和打开设备的顺序就无法保证,因此做了一个小实验来测试是否是线程安全的。
首先需要添加引用:LibUsbDotNet.dll
using LibUsbDotNet;using LibUsbDotNet.DeviceNotify;class Program { //USB插拔通知事件 static IDeviceNotifier DevNotifier; static int n = 0; static void Main(string[] args) { DevNotifier = DeviceNotifier.OpenDeviceNotifier(); DevNotifier.Enabled = true; DevNotifier.OnDeviceNotify += DevNotifier_OnDeviceNotify; while (!Console.KeyAvailable) Application.DoEvents(); } private static void DevNotifier_OnDeviceNotify(object sender, DeviceNotifyEventArgs e) { n++; for(int i=0;i <0xffff;i++) { for (int j = 0; j < n; j++) Console.Write("\t"); Console.WriteLine(i.ToString("X4") + " " + n.ToString()); } } }
运行如下:
控制台输出被覆盖掉了。不过能很明显的看见,当快速插拔USB的时候,是1、2、3、4按顺序执行的。也就是说当多个USB插拔事件发生的时候,事件是线程排队的。因此是线程安全的。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。