完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
路径在:..samplesutilityThreadingThreadSafeQueueDirectPtrAccess中
/*---------------------------------------------------------------------------*/ /* Generate random data and write it to the queue. */ /*---------------------------------------------------------------------------*/ static int CVICALLBACK AcquireTSQDataWithPtrsThreadFunction (void *unused) { int numToWrite; int index; double *writePtr; while (running) { /* Use direct pointers to write data to the thread-safe queue. */ if (CmtGetTSQWritePtr (tsqHandle, &writePtr, &numToWrite) >= 0) { /* Ensure we do not overflow the queue. */ if (numToWrite > NUM_ITEMS_IN_QUEUE_WRITE_BLOCK) numToWrite = NUM_ITEMS_IN_QUEUE_WRITE_BLOCK; for (index = 0; index < numToWrite; ++index) { *writePtr++ = rand() * 100.0 / (double)RAND_MAX; } CmtReleaseTSQWritePtr (tsqHandle, numToWrite); } Delay(.01); } return 0; } 为何CmtGetTSQWritePtr (tsqHandle, &writePtr, &numToWrite) 中numToWrite获得的值为5?如何理解? /*---------------------------------------------------------------------------*/ /* Read data from the queue and plot it to the stripchart. */ /*---------------------------------------------------------------------------*/ static void CVICALLBACK PlotDataFromQueueCallback (CmtTSQHandle queueHandle, unsigned int event, int value, void *callbackData) { double *readPtr; int numItemsInQueue; /* Use direct pointers to read the data from the queue. */ CmtGetTSQReadPtr (queueHandle, &readPtr, &numItemsInQueue); PlotStripChart (panelHandle, PANEL_TSQPLOT, readPtr, NUM_ITEMS_IN_QUEUE_READ_BLOCK, 0, 0, VAL_DOUBLE); CmtReleaseTSQReadPtr (queueHandle, NUM_ITEMS_IN_QUEUE_READ_BLOCK); } 为何CmtGetTSQReadPtr (queueHandle, &readPtr, &numItemsInQueue);中numItemsInQueue获得的值则每次都变化?何解? AcquireTSQDataWithPtrsThreadFunction与PlotDataFromQueueCallback是同步进行的? /*---------------------------------------------------------------------------*/ /* Create threads to generate data and to display the data. */ /*---------------------------------------------------------------------------*/中 /* Install a callback to read and plot the generated data. */ CmtInstallTSQCallback (tsqHandle, EVENT_TSQ_ITEMS_IN_QUEUE, NUM_ITEMS_IN_QUEUE_READ_BLOCK, PlotDataFromQueueCallback, NULL, CmtGetCurrentThreadID(), &plotDataCallbackID); 上面的CmtInstallTSQCallback中有一个回调函数PlotDataFromQueueCallback 后面怎跟着一个 /* Start the writer thread. */ CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE, AcquireTSQDataWithPtrsThreadFunction, 0, 0); 上面这2个函数的是不是这个意思: 首先安装一个读数据与绘制曲线的回调函数,但是当前还没有数据可以处理 后面则开始一个写随机数的CmtScheduleThreadPoolFunction发起写线程函数AcquireTSQDataWithPtrsThreadFunction 写完了循环数据之后来一句CmtReleaseTSQWritePtr (tsqHandle, numToWrite); 释放了写指针 这时就会自动回调PlotDataFromQueueCallback函数来绘制曲线? PlotDataFromQueueCallback与AcquireTSQDataWithPtrsThreadFunction之间的关系应该如何理解线程在处理过程中的关系? |
|
相关推荐
1个回答
|
|
|
感谢楼主分享~~~
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 05:01 , Processed in 0.702125 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3856