LabWindows?/CVI中的多线程技术
int CVICALLBACK ThreadFunction (void *functionData); |
11. 在线程局部变量中存储动态分配的数据
如果你使用线程局部变量来存储动态分配到的资源,那么你需要释放掉分配的资源的每一个拷贝。也就是说,你需要释放掉每个线程中分配到的资源拷贝。使用LabWindows/CVI的线程局部变量,你可以指定用于销毁线程局部变量的回调函数。当你销毁线程局部变量时,每个访问过变量的线程都会调用指定的回调函数。下面的代码展示了如何创建和访问保存了动态分配的字符串的线程局部变量。
int CVICALLBACK ThreadFunction (void *functionData); |
一些分配的资源必须在分配到它们的线程中释放。这些资源被称为拥有线程关联度。例如,面板必须在创建它的线程中销毁掉。在调用CmtDiscardThreadLocalVar时,Utility Library在线程中调用被称为CmtDiscardThreadLocalVar的线程局部变量销毁回调函数。Utility Library为每一个访问过该变量的线程调用一次销毁回调函数。它将threadID参数传递给销毁回调函数,这个参数指定了调用销毁回调函数的线程的ID号。你可以使用这个线程ID来确定是否可以直接释放掉拥有线程关联度的资源还是必须在正确的线程中调用Toolslib中的PostDeferredCallToThreadAndWait函数来释放资源。下面的代码显示了如何更改前面的例子以在分配字符串的线程中将它们释放掉。
void CVICALLBACK StringDiscard (void *threadLocalPtr, int event, void *callbackData, unsigned int threadID) |
LabWindowsCVI多线程技 相关文章:
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)
- 为任意波形发生器增加价值(10-27)
- 基于PCI 总线的高速数据采集系统(09-30)
- 泰克全新VM6000视频测试仪助力数字电视等产品测试 (10-06)