硬件功能的包装器

时间:2010-01-18 16:09:32

标签: c++ multithreading

我正在开发一个项目,我必须为一些硬件功能做一个包装。

我们必须在非易失性存储器中写入和读取数据。我有一个库,里面有卖家公司的读写功能。问题是,由于硬件特性,应该在每次调用之间调用这些函数,延迟时间。

所以我的解决方案是启动一个线程,创建一个队列并创建自己的读写函数。因此,每次调用我的函数时,数据都将存储在队列中,然后在循环线程中实际读取或写入内存。我的函数将使用互斥锁来同步对队列的访问。我的包装器将在dll上。主模块将调用我的dll init函数一次启动线程,然后它将从不同的线程多次调用我的读/写函数。

我的问题是:这样做是否安全?原始功能是不可重入的。我不知道这是否会成为一个问题。有更好的方法吗?

任何帮助将不胜感激。


抱歉,我忘记了一些事情:

- 使用的语言是C ++

- 主程序将调用我的包装器dll,但也将调用将调用包装器DLL的其他模块(dll)。

1 个答案:

答案 0 :(得分:0)

在此上下文中添加介体是一种非常典型的解决方案,因此您不会在这里杂草。我会说你需要实现这个,因为原始函数不是可重入的。当然,假设您拥有对硬件的访问权限。 (即你是司机。)如果其他人可以访问同一件硬件,那么你将不得不拿出一些更高级别的合同。然后,您的线程提供对驱动程序的有序访问。你会发现调解员也会让你节流。

看起来困难的部分是知道何时可以进行下一次设备调用。它是否有某种标志让你知道它已准备好进行读写?其他一些问题:您打算如何与客户沟通状态?由于您提供的是异步接口,因此您需要进行某种错误回调注册等。请查看正常的异步驱动程序接口以获取相关信息。

但总的来说,听起来像是一个很好的策略。正如另一张海报所提到的,更具体的内容会很好。