1.内部使用 C 的 longjmp 机制让出一个协程。 因此,如果一个 C 函数 foo 调用了一个 API 函数, 而这个 API 函数让出了(直接或间接调用了让出函数)。 由于 longjmp 会移除 C 栈的栈帧, Lua 就无法返回到 foo 里了。
2.为了回避这类问题, 碰到 API 调用中调用让出时,除了那些抛出错误的 API 外,还提供了三个函数: lua_yieldk, lua_callk,和 lua_pcallk 。 它们在让出发生时,可以从传入的 延续函数 (名为 k 的参数)继续运行。
3.我们需要预设一些术语来解释延续点。 对于从 Lua 中调用的 C 函数,我们称之为 原函数。 从这个原函数中调用的上面所述的三个 C API 函数我们称之为 被调函数。 被调函数可以使当前线程让出。 (让出发生在被调函数是 lua_yieldk, 或传入 lua_callk 或 lua_pcallk 的函数调用了让出时。)
4.假设正在运行的线程在执行被调函数时让出。 当再次延续这条线程,它希望继续被调函数的运行。 然而,被调函数不可能返回到原函数中。 这是因为之前的让出 *** 作破坏了 C 栈的栈帧。 作为替代品,Lua 调用那个作为被调函数参数给出的 延续函数 。 正如其名,延续函数将延续原函数的任务。
5.注意这里那个额外的显式的对延续函数的调用:Lua 仅在需要时,这可能是由错误导致的也可能是发生了让出而需要继续运行,才会调用延续函数。 如果没有发生过任何让出,调用的函数正常返回, 那么 lua_pcallk (以及 lua_callk)也会正常返回。 (当然,这个例子中你也可以不在之后调用延续函数, 而是在原函数的调用后直接写上需要做的工作。)
6.Lua 会把延续函数看作原函数。 延续函数将接收到和原函数相同的 Lua 栈,其接收到的 lua 状态也和 被调函数若返回后应该有的状态一致。 (例如, lua_callk 调用之后, 栈中之前压入的函数和调用参数都被调用产生的返回值所替代。) 这时也有相同的上值。 等到它返回的时候,Lua 会将其看待成原函数的返回去 *** 作。
7.我们需要预设一些术语来解释延续点。 对于从 Lua 中调用的 C 函数,我们称之为 原函数。 从这个原函数中调用的上面所述的三个 C API 函数我们称之为 被调函数。 被调函数可以使当前线程让出。 (让出发生在被调函数是 lua_yieldk, 或传入 lua_callk 或 lua_pcallk 的函数调用了让出时。)
8.假设正在运行的线程在执行被调函数时让出。 当再次延续这条线程,它希望继续被调函数的运行。 然而,被调函数不可能返回到原函数中。 这是因为之前的让出 *** 作破坏了 C 栈的栈帧。 作为替代品,Lua 调用那个作为被调函数参数给出的 延续函数 。 正如其名,延续函数将延续原函数的任务。
希望能帮到你,谢谢!
下面是具体步骤:
需要的工具,用了exe4j这个软件
exe4j是一个帮助你集成Java应用程序到Windows *** 作环境的java可执行文件生成工具
无论这些应用是用于服务器,还是图形用户界面(GUI)或命令行的应用程序
exe4j帮助你以一种安全的方式启动你的 java应用程序来显示本地启动画面
检测及发布合适的JRE和JDK以及进行启动时所发生的错误处理等
1、先把自己的程序发布成jar文件
这是eclipse自带的功能,右键工程包-->Export
然后选择Java-->JAR file,点击next
2、选择输出路径,next
3、取消勾选Export class files with compile errors
因为一般warnings可以忽视,而errors不行,点击next
4、选择main class,即带有main方法的类,finish即可
5、将jar文件转为exe文件
之前生成的jar文件,以下是创建的目录结构6、这里如果第一次用不需要管,点击next
如果你使用完保存过输出配置,可以选open configuration
7、进入Project type,选择“JRA IN EXE” mode,点击next
出现Application info
上面的框填写程序名字,下面的框选择输出路径
8、Configure executable
GUI application-->勾选allow,下面框填写文件名字,icon file可以自己选择图标文件
如果限制只能同时打开一个程序,勾选allow only a single,其他基本默认
如果你的exe4j和jdk位数不一致,记得把advanced options里的32bit or 64bit勾选
否则生成不报错exe也无法正确运行
9、Java invocation,点Class path框右边的绿色加号
把自己生成的jar文件路径写进Archive(用到的外部jar包也要都添加进去)
然后下面main class from框选择含有main方法的类
10、Minimum和Maximum填写允许的最小和最大jdk版本号
Configure search sequence选项,框里应该只保留Search Windows registry
没有的话右边绿色箭头添加,其他的删除后,绿色箭头添加Directory
11、找到我们开始的时候拷到文件夹里的jre,点击finish
12、然后桌面出现生成的exe文件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)