tcl/tk学习笔记《二》 tcl/tk概览二
Tcl_NRAddCallback是 当在interp指定的解析器中的当前跳转函数指令返回的时候调用的一个C的回调函数,这哥们有6个参数
第一个参数是 : interp 解析器的指针
第二个参数是 : Tcl_NRPostProc * postProcPtr的指针指向的回调函数
后面的就是几个参数
typedef int Tcl_NRPostProc(
ClientData data[],
Tcl_Interp *interp,
int result);
当跳板函数调用回调函数的时候,这个data参数是指向一个包含4个参数的数组传递给Tcl_NRAddCallback的data0到data3中,tcl解析器被interp这个参数指定的,result函数的值则是有命令指向的结果赋值进去的,result的值可能为:(TCL_OK, TCL_ERROR, TCL_RETURN, TCL_BREAK or TCL_CONTINUE),这个回调函数就会返回一个result去控制后面的执行结果
多个TclNRAddCallback调用就会请求多个相同的或者不同的回调函数,如果多个回调函数被请求,遵从“后入先出”的的规则,也就是,最后被执行的那个回调函数首先返回
|
typedef struct {
const char *name; /* 命令的名称. */
Tcl_ObjCmdProc *objProc; /* 实现这个命令的函数. 咱就看这个 */
CompileProc *compileProc; /* 编译这个命令的函数 */
Tcl_ObjCmdProc *nreProc; /* NR-based function for command */
int flags; /*标示, as defined below. */
} CmdInfo;
#define CMD_IS_SAFE 1
下面是重点了
static const CmdInfo builtInCmds[] = {
.....直接到重点......
{"while", Tcl_WhileObjCmd, TclCompileWhileCmd, TclNRWhileObjCmd, CMD_IS_SAFE},
.......如果你对生活充满激情,你可以看看其他的.....
............
}
|
int
Tcl_WhileObjCmd(
ClientData dummy, /* Not used. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
return Tcl_NRCallObjProc(interp, TclNRWhileObjCmd, dummy, objc, objv);
}
int
TclNRWhileObjCmd(
ClientData dummy, /* Not used. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
ForIterData *iterPtr;
if (objc != 3) {
Tcl_WrongNumArgs(interp, 1, objv, "test command");
return TCL_ERROR;
}
/*
* We reuse [for]'s callback, passing a NULL for the 'next' script.
*/
TclSmallAllocEx(interp, sizeof(ForIterData), iterPtr);
iterPtr->cond = objv[1];
iterPtr->body = objv[2];
iterPtr->next = NULL;
iterPtr->msg = "\n (\"while\" body line %d)";
iterPtr->word = 2;
TclNRAddCallback(interp, TclNRForIterCallback, iterPtr, NULL,
NULL, NULL);
return TCL_OK;
}
|
tcl/tk学习笔记《二》 tcl/tk概览二相关推荐
- 学习笔记之数据可视化(二)——页面布局(上)
~续上一章 2. 项目页面布局 2.1 基础布局 2.1.1 PC端屏幕宽度适配设置 2.1.2 主体容器viewport背景图片 2.1.3 HTML结构 2.1.4 css样式代码 2.2 边框图 ...
- 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码
吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...
- 学习笔记之数据可视化(二)—— 页面布局(下)
续上一章 2.7 地图区域(.map) 2.7.1 实现步骤: 2.8 用户统计模块 2.8.1 布局: 2.8.2 柱状图 2.9 订单模块 2.9.1 订单区域布局 2.9.2 订单区域(orde ...
- 学习笔记之数据可视化(二)——页面布局(中)
续上一章 2.6 监控区域布局 2.6.1 布局结构解析: 2.6.2 样式描述: 2.6.3 HTML结构及CSS样式代码 2.6.3 ### 监控区域-效果 2.6.7 点位区域(point) 2 ...
- STM32学习笔记:FLASH读写之二
因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1.RAM和ROM的一些基本概念 -- STM32学习笔记:FLASH读写之一 2.STM32的Flash寄存器 ...
- 强化学习学习笔记——马尔可夫决策过程(二)
强化学习学习笔记--马尔可夫决策过程(二) 马尔科夫奖励过程(Markov Reword Process,MRP) 爱学习的马尔科夫蛙 状态值函数(State-Value Function) 马尔科夫 ...
- Java学习笔记-Day64 Spring 框架(二)
Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...
- # java学习笔记 2020 2/8(十二)慕课网 构造方法
java学习笔记 2020 2/8(十二)慕课网 构造方法 构造方法是一种特殊的方法,它是一个与类同名的方法. 对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化. 当类实例化一个对象时会 ...
- Deep Learning(深度学习)学习笔记整理系列之(二)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- OpenCV学习笔记(一)(二)(三)(四)(五)
OpenCV学习笔记(一) 决心开始研究OpenCV.闲言少叙,sourceforge网站最近的版本是2011年8月的OpenCV2.3.1,下载安装,我这里使用的开发环境是vs2008,网上搜了一下 ...
最新文章
- cad卸载_30年CAD老师傅一步步教你怎么把CAD卸载得一干二净
- 第二期冲刺站立会议个人博客15(2016/6/08)
- 纯数学思想——在哈尔滨的寒风中
- 【数据结构与算法】之深入解析二叉树的算法实现和递归套路深度实践
- 【解题报告+通法】_九宫幻方 蓝桥杯 2017年C组第八题(dfs解法)
- Bootstrap学习一
- mysql中limit后面不能使用运算符
- 【推荐实践】Flink 状态(State)管理在推荐场景中的应用
- web文件上传(二)--使用form还是ajax
- springboot 整合 Servlet、Filter、Listener、访问静态资源
- python免费教程视频-28岁想从零开始自学python,有哪些靠谱免费的视频?
- 理清网站数据分析思路导图
- [贪心][模拟] Jzoj P5811 简单的填数
- javascript中的滚动到顶部和Scroll有关的方法
- C++编程视频教程《VC知识库大讲堂C++教程》
- jxls设置隐藏列隐藏行
- 疫情时代无接触AI人脸识别技术助力智慧工地迅猛发展
- MOS管当开关控制时,一般用PMOS做上管NMOS做下管的原因
- 第三方理财平台海银财富上市破发,IPO筹划两年募资规模缩水至3千万美元
- android mp4 画面裁剪,Android视频时长裁剪