This page has been translated automatically.
编程
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
CIGI Client Plugin
Rendering-Related Classes
注意! 这个版本的文档是过时的,因为它描述了一个较老的SDK版本!请切换到最新SDK版本的文档。
注意! 这个版本的文档描述了一个不再受支持的旧SDK版本!请升级到最新的SDK版本。

Wait语句

这种架构会暂时停止当前函数的执行。函数的地址会被放置在等待函数列表中。在调用runWaits函数后,等待函数处于非冻结状态。runWaits函数仅可在应用程序的C++部分执行。Unigine会自动运行等待列表每帧中的函数。因此可以创建线程,这些线程没帧仅运行一次并使用wait 用于实现同步。

注意
wait架构仅能在线程中使用。

语法

源代码 (UnigineScript)
wait value;

部分

  • value 是一种可选的返回型值 (默认情况为0)。

实例

源代码 (UnigineScript)
void thread_func() {
	for(int i = 0; i < 4; i++) {
		log.message("%d\n",i);
		wait;
	}
}

thread("thread_func");

/* Output: 
 * "0" // 第一帧
 * "1" // 第二帧
 * "2" // 第三帧
 * "3" // 第四帧
 */
注意
当调用简单函数(而不是类的成员函数)时,wait 架构才有效:
源代码 (UnigineScript)
void update_redirector(Sprite sprite) {
	while(1) {
		sprite.update();
		wait;
	}
}

如果设置了类的实例,将会生成一个错误因为在保存下一帧中被runWaits调用的函数时,类的实例并不会被保存。然而如果将类函数作为静态函数(但不传递类的实体给此函数)进行调用wait便有可能:

源代码 (UnigineScript)
class Foo {

	void update() { 
		while(true) wait 1; 
	}
};
 
Foo f = new Foo();
Foo::update();		// 这样可用,因为方法被作为静态函数进行调用

// f.update();		// 由于传递了类的实例,因此这样会造成冲突

也可参看: thread().

最新更新: 2017-10-20
Build: ()