Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://www.stsci.edu/~sontag/spicedocs/cspice/cvpool_c.html
Дата изменения: Sat Dec 17 06:08:39 2005 Дата индексирования: Sun Apr 10 23:58:29 2016 Кодировка: Поисковые слова: meteoroid |
Determine whether or not any of the variables that are to be watched and have a specified agent on their distribution list have been updated.
KERNEL
Variable I/O Description -------- --- -------------------------------------------------- agent I Name of the agent to check for notices. update O SPICETRUE if variables for agent have been updated.
agent is the name of a function or significant portion of code that needs to access variables in the kernel pool. Generally this agent will buffer these variables internally and fetch them from the kernel pool only when they are updated.
update is a logical flag that will be set to SPICETRUE if the variables in the kernel pool that are required by agent have been updated since the last call to cvpool_c.
See function szpool_c.
This entry point allows the calling program to determine whether or not variables associated with with agent have been updated. Making use of this entry point in conjunction with the entry point swpool_c (set watch on pool variables) modules can buffer kernel pool variables they need and fetch values from the kernel pool only when variables have been updated. Note that the call to cvpool_c has a side effect. Two consecutive calls to cvpool_c with the same agent will always result in the update being SPICEFALSE on the second call. In other words, if you imbed the following two lines of code in a piece of code cvpool_c ( agent, &update ); cvpool_c ( agent, &update ); and then test update, it will be SPICEFALSE. The idea is that once a call to cvpool_c has been made, the kernel pool has performed its duty and notified the calling routine that one of the agent's variables has been updated. Consequently, on the second call to cvpool_c above, the kernel pool will not have any updates to report about any of agent's variables. If, on the other hand, you have code such as cvpool_c ( agent, &update ); ldpool_c ( "myfile.dat" ); cvpool_c ( agent, &update ); the value of update will be true if one of the variables associated with agent was updated by the call to ldpool_c (and that variable has been specified as one to watch by call a call to swpool_c). It should also be noted that any call to cvpool_c that occurs immediately after a call to swpool_c will result in update being returned as SPICETRUE In other words, code such as shown below, will always result in the value of UPDATE as being returned SPICETRUE: swpool_c ( agent, nnames, namelen, names ); cvpool_c ( agent, &update ); See the header for swpool_c for a full discussion of this feature.
Suppose that you have an application subroutine, MYTASK, that needs to access a large data set in the kernel pool. If this data could be kept in local storage and kernel pool queries performed only when the data in the kernel pool has been updated, the routine can perform much more efficiently. The code fragment below illustrates how you might make use of this feature. #include "SpiceUsr.h" . . . /. On the first call to this routine establish those variables that we will want to read from the kernel pool only when new values have been assigned. ./ if ( first ) { first = SPICEFALSE; swpool_c ( "MYTASK", nnames, namelen, names ); } /. If any of the variables has been updated, fetch them from the kernel pool. ./ cvpool_c ( "MYTASK", &update ); if ( update ) { for ( i = 0; i < NVAR; i++ ) { gdpool_c( MYTASK_VAR[i], 1, NMAX, n[i], val[i], &found[i] ); } }
None.
1) If the string pointer for agent is null, the error SPICE(NULLPOINTER) will be signaled. 2) If the input string haslength zero, the error SPICE(EMPTYSTRING) will be signaled.
None.
N.J. Bachman (JPL) W.L. Taber (JPL)
None.
-CSPICE Version 1.0.0, 05-JUN-1999 (NJB) (WLT)
Check the kernel pool for updated variables