多线程访问非托管代码的技巧Sleep
来源:互联网 发布:可以用手机开淘宝店吗 编辑:程序博客网 时间:2024/06/06 16:36
例:这样的一个HID驱动使用
/// <summary>
/// HID驱动
/// </summary>
/// <param name="cyHandle">设备句柄</param>
/// <param name="lpBuffer">数据缓冲区</param>
/// <param name="dwLength">读取数据长度</param>
/// <param name="dwReturn">返回时读取了多少数据,用于验正数据正确性</param>
/// <param name="dwTimeOut">读取当前数据超时时长</param>
/// <returns></returns>
[DllImport("HidDriver.dll", CharSet = CharSet.Ansi)]
public extern static int HID_Read(IntPtr cyHandle, [In, Out] byte[] lpBuffer, int dwLength, ref int dwReturn, int dwTimeOut);
下面是一个读取数据的方法使用.设计是的超时30秒,便这里用的是600个50毫秒,好处是当软件发出一个读数据的指令后,就退出软件时.
AppExit为true,HID_Read最多延时50毫秒就会退出.
/// <summary>
/// 从设备读取数据
/// </summary>
/// <param name="data">待读取的数据所存放的数据缓存区</param>
/// <param name="length">待读取的数据长度</param>
/// <returns>所读取的数据长度</returns>
public virtual int Read(byte[] data, int length)
{
int retNums = 0;
Thread.Sleep(50);
int index = 0;
while (index < 600 && !AppExit)
{
if (HidUtility.API.HID_Read(Handle, data, length, ref retNums, 50) == HidUtility.Const.HID_DEVICE_SUCCESS) break; ;
index++;
}
return retNums;
}
在多线程中一般我也这样写.从来不用while(true){...} 和 Thread.Sleep(值)值大于1000以上的,大于1000的这样写
int count = 0;
while (count < 10 && !IsExit)
{
//todo:
Thread.Sleep(100);
count++;
}
- 多线程访问非托管代码的技巧Sleep
- 在非托管的c++代码中访问webservice服务
- 托管与非托管代码的区别
- 托管与非托管代码的区别
- .net如何使用C++的代码?托管C ++和非托管C ++互相访问
- 非托管代码,托管代码
- 托管代码&非托管代码
- 托管代码和非托管代码效率的对比问题
- 托管代码和非托管代码效率的对比。
- 托管代码和非托管代码的区别
- 托管代码与非托管代码的区别
- 调试托管代码和非托管代码混合的项目
- 托管代码与非托管代码的性能比较
- 托管代码和非托管代码效率的对比
- 托管代码和非托管代码的相互调用
- 【转】托管代码和非托管代码的区别
- 托管代码和非托管代码的区别
- 托管代码和非托管代码的区别
- ASP.NET页面刷新方法总结
- 纳什博弈论的原理与应用--北京晚报
- SQL存储过程测试(5)——从T-SQL测试套件里把测试结果直接写入文本文件
- 09.10.26
- 敏捷开发与极限编程(二)
- 多线程访问非托管代码的技巧Sleep
- CKEditor3.0.1初步使用
- Exchange 2007 升级到sp1
- json-lib.jar 设置日期格式
- 学习LINQ工具:LINQPad
- .NET之0---.net的前世
- 常用数据库,取前几条数据SQL语句
- [SharePoint] 增加PDF图片到SharePoint的Docicon.xml
- Strlen(a) 的值 是多少