我在这里有一个类似的应用程序,并使用带有 TCP_NO_DELAY 选项集的 TCP 套接字(禁用执行某种数据包缓冲的 Nagle 算法)。套接字应该允许 100 毫秒的更新速率没有问题,尽管实际的网络延迟将始终是一个未知变量。对于我的应用程序来说,只要它保持在某个限制以下就无关紧要(如果时间戳增量变得太大,还可以通过发送每个数据包的时间戳和红色大对话框来检查这一点:])。对你的申请有影响吗?即,每当 LV 仪器获取新样本时,它的值必须在 x 毫秒内到达 C 应用程序是否重要?
您可能会使用 dll 方法,但它不像套接字那么简单,它会使两个应用程序更加相互依赖。不过,可变访问几乎是即时的。我看到至少两种可能性:
- 将你的整个C 应用程序放在一个 dll 中(起初可能看起来很奇怪,但它确实有效),并让 LV 加载它并在其上调用方法。例如,启动你的应用程序 LV 调用 dll 的 Start() 方法,然后在循环中 LV 获取它的样本,它调用 dll 的 NewSampleValue(0 方法左右。这也意味着你的应用程序不能独立运行,除非你为它编写一个单独的主机进程。
- 查看共享进程内存,并让 C 应用程序和另一个 dll 共享公共内存。LV 将加载该 dll 并在其上调用一个方法以将一个值写入共享内存,然后 C 应用程序可以在轮询一个标志后读取它(这需要一个锁!)。
- 也有可能让 C 应用程序使用 dll/activeX/ 调用 LV 程序?电话,但我不知道该系统是如何工作的..
我肯定会远离文件方法:磁盘 I/O 可能是一个真正的瓶颈,而且它还有锁定问题,这对于文件来说是很麻烦的。当 LV 正在写入文件时,C 应用程序无法读取文件,反之亦然,这可能会引入额外的延迟。
在旁注中,您可以看到上述每种方法都使用推式或拉式模型(TCP 可以以两种方式实现),这可能会影响您最终决定走哪条路。. Push = LV 表示C app 直接,pull = C app 必须轮询一个标志或向 LV 询问值。