CrtInterp.3
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1989-1993 The Regents of the University of California.
  3. '" Copyright (c) 1994-1996 Sun Microsystems, Inc.
  4. '"
  5. '" See the file "license.terms" for information on usage and redistribution
  6. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  7. '" 
  8. '" RCS: @(#) $Id: CrtInterp.3,v 1.7 2002/06/26 11:50:52 msofer Exp $
  9. '" 
  10. .so man.macros
  11. .TH Tcl_CreateInterp 3 7.5 Tcl "Tcl Library Procedures"
  12. .BS
  13. .SH NAME
  14. Tcl_CreateInterp, Tcl_DeleteInterp, Tcl_InterpDeleted - create and delete Tcl command interpreters
  15. .SH SYNOPSIS
  16. .nf
  17. fB#include <tcl.h>fR
  18. .sp
  19. Tcl_Interp *
  20. fBTcl_CreateInterpfR()
  21. .sp
  22. fBTcl_DeleteInterpfR(fIinterpfR)
  23. .sp
  24. int
  25. fBTcl_InterpDeletedfR(fIinterpfR)
  26. .SH ARGUMENTS
  27. .AS Tcl_Interp *interp
  28. .AP Tcl_Interp *interp in
  29. Token for interpreter to be destroyed.
  30. .BE
  31. .SH DESCRIPTION
  32. .PP
  33. fBTcl_CreateInterpfR creates a new interpreter structure and returns
  34. a token for it.  The token is required in calls to most other Tcl
  35. procedures, such as fBTcl_CreateCommandfR, fBTcl_EvalfR, and
  36. fBTcl_DeleteInterpfR.
  37. Clients are only allowed to access a few of the fields of
  38. Tcl_Interp structures;  see the fBTcl_InterpfR
  39. and fBTcl_CreateCommandfR man pages for details.
  40. The new interpreter is initialized with the built-in Tcl commands
  41. and with the variables documented in tclvars(n).  To bind in
  42. additional commands, call fBTcl_CreateCommandfR.
  43. .PP
  44. fBTcl_DeleteInterpfR marks an interpreter as deleted; the interpreter
  45. will eventually be deleted when all calls to fBTcl_PreservefR for it have
  46. been matched by calls to fBTcl_ReleasefR. At that time, all of the
  47. resources associated with it, including variables, procedures, and
  48. application-specific command bindings, will be deleted.  After
  49. fBTcl_DeleteInterpfR returns any attempt to use fBTcl_EvalfR on the
  50. interpreter will fail and return fBTCL_ERRORfR. After the call to
  51. fBTcl_DeleteInterpfR it is safe to examine the interpreter's result,
  52. query or set the values of variables, define, undefine or retrieve
  53. procedures, and examine the runtime evaluation stack. See below, in the
  54. section fBINTERPRETERS AND MEMORY MANAGEMENTfR for details.
  55. .PP
  56. fBTcl_InterpDeletedfR returns nonzero if fBTcl_DeleteInterpfR was
  57. called with fIinterpfR as its argument; this indicates that the
  58. interpreter will eventually be deleted, when the last call to
  59. fBTcl_PreservefR for it is matched by a call to fBTcl_ReleasefR. If
  60. nonzero is returned, further calls to fBTcl_EvalfR in this interpreter
  61. will return fBTCL_ERRORfR.
  62. .PP
  63. fBTcl_InterpDeletedfR is useful in deletion callbacks to distinguish
  64. between when only the memory the callback is responsible for is being
  65. deleted and when the whole interpreter is being deleted. In the former case
  66. the callback may recreate the data being deleted, but this would lead to an
  67. infinite loop if the interpreter were being deleted.
  68. .SH "INTERPRETERS AND MEMORY MANAGEMENT"
  69. .PP
  70. fBTcl_DeleteInterpfR can be called at any time on an interpreter that may
  71. be used by nested evaluations and C code in various extensions. Tcl
  72. implements a simple mechanism that allows callers to use interpreters
  73. without worrying about the interpreter being deleted in a nested call, and
  74. without requiring special code to protect the interpreter, in most cases.
  75. This mechanism ensures that nested uses of an interpreter can safely
  76. continue using it even after fBTcl_DeleteInterpfR is called.
  77. .PP
  78. The mechanism relies on matching up calls to fBTcl_PreservefR with calls
  79. to fBTcl_ReleasefR. If fBTcl_DeleteInterpfR has been called, only when
  80. the last call to fBTcl_PreservefR is matched by a call to
  81. fBTcl_ReleasefR, will the interpreter be freed. See the manual entry for
  82. fBTcl_PreservefR for a description of these functions.
  83. .PP
  84. The rules for when the user of an interpreter must call fBTcl_PreservefR
  85. and fBTcl_ReleasefR are simple:
  86. .TP
  87. Interpreters Passed As Arguments
  88. Functions that are passed an interpreter as an argument can safely use the
  89. interpreter without any special protection. Thus, when you write an
  90. extension consisting of new Tcl commands, no special code is needed to
  91. protect interpreters received as arguments. This covers the majority of all
  92. uses.
  93. .TP
  94. Interpreter Creation And Deletion
  95. When a new interpreter is created and used in a call to fBTcl_EvalfR,
  96. fBTcl_VarEvalfR, fBTcl_GlobalEvalfR, fBTcl_SetVarfR, or
  97. fBTcl_GetVarfR, a pair of calls to fBTcl_PreservefR and
  98. fBTcl_ReleasefR should be wrapped around all uses of the interpreter.
  99. Remember that it is unsafe to use the interpreter once fBTcl_ReleasefR
  100. has been called. To ensure that the interpreter is properly deleted when
  101. it is no longer needed, call fBTcl_InterpDeletedfR to test if some other
  102. code already called fBTcl_DeleteInterpfR; if not, call
  103. fBTcl_DeleteInterpfR before calling fBTcl_ReleasefR in your own code.
  104. .TP
  105. Retrieving An Interpreter From A Data Structure
  106. When an interpreter is retrieved from a data structure (e.g. the client
  107. data of a callback) for use in fBTcl_EvalfR, fBTcl_VarEvalfR,
  108. fBTcl_GlobalEvalfR, fBTcl_SetVarfR, or fBTcl_GetVarfR, a pair of
  109. calls to fBTcl_PreservefR and fBTcl_ReleasefR should be wrapped around
  110. all uses of the interpreter; it is unsafe to reuse the interpreter once
  111. fBTcl_ReleasefR has been called.  If an interpreter is stored inside a
  112. callback data structure, an appropriate deletion cleanup mechanism should
  113. be set up by the code that creates the data structure so that the
  114. interpreter is removed from the data structure (e.g. by setting the field
  115. to NULL) when the interpreter is deleted. Otherwise, you may be using an
  116. interpreter that has been freed and whose memory may already have been
  117. reused.
  118. .PP
  119. All uses of interpreters in Tcl and Tk have already been protected.
  120. Extension writers should ensure that their code also properly protects any
  121. additional interpreters used, as described above.
  122. .SH "SEE ALSO"
  123. Tcl_Preserve(3), Tcl_Release(3)
  124. .SH KEYWORDS
  125. command, create, delete, interpreter