yield[編程術語]

Yield的功能將控制權轉移給其它圖形對象,包括非PowerBuilder對象。該函式檢測訊息佇列,如果有訊息,就把訊息取出。利用該函式可以在執行耗時較長的操作時把控制權轉讓給其它套用。

基本信息

語法

Yield()

Boolean返回值。如果在訊息佇列中提取到了訊息,那么函式返回TRUE,否則返回FALSE。用法正常情況下,PowerBuilder應用程式在執行一段代碼(比如函式或事件處理程式)的過程中不回響用戶的操作。對耗時短暫的代碼段來說,這種處理方式沒有什麼不妥的地方,但是,如果某個代碼段的執行耗時較長,應用程式又希望為用戶提供更多的控制權,那么需要在這段代碼中插入Yield()函式,讓用戶能夠進行其它操作,特別在循環執行的代碼中更應該如此。應用程式執行Yield()函式後,如果發現訊息佇列中存在訊息,它將允許對象處理這些訊息,處理之後,繼續Yield()函式後面代碼的執行。因此,代碼中插入Yield()函式將降低應用程式的運行效率。

---------------------------------------------------------------------------------------------------------------------------------------------------------

yield(C# 參考)

在疊代器塊中用於向枚舉數對象提供值或發出疊代結束信號。它的形式為下列之一:

yield return <expression>;

yield break;

備註 :

計算表達式並以枚舉數對象值的形式返回;expression 必須可以隱式轉換為疊代器的 yield 類型。

yield 語句只能出現在 iterator 塊中,該塊可用作方法、運算符或訪問器的體。這類方法、運算符或訪問器的體受以下約束的控制:

不允許不安全塊。

方法、運算符或訪問器的參數不能是 ref 或 out。

yield 語句不能出現在匿名方法中。

當和 expression 一起使用時,yield return 語句不能出現在 catch 塊中或含有一個或多個 catch 子句的 try 塊中。

在下面的示例中,疊代器塊(這裡是方法 Power(int number,int power))中使用了 yield 語句。當調用 Power 方法時,它返回一個包含數字冪的可枚舉對象。注意 Power 方法的返回類型是 IEnumerable(一種疊代器接口類型)。

例子

C#

public class List

{

//using System.Collections;

public static IEnumerable Power(int number,int exponent)

{

int counter = 0;

int result = 1;

while (counter++ < exponent)

{

result = result * number;

yield return result;

}

}

static void Main()

{

// Display powers of 2 up to the exponent 8:

foreach (int i in List.Power(2,8))

{

Console.Write("{0} ",i);

}

}

}

/*

Output:

2 4 8 16 32 64 128 256

*/

---------------------------------------------------------------------------------------------------------------------------------------------------------

JAVA例子

class OutputClass implements Runnable{

String name;

OutputClass(String s){

name=s;

}

public void run(){

for(int i=0;i<3;i++){

System.out.println(name);

Thread.yield();

}

}

}

public class RunThreads {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

OutputClass out1=new OutputClass("Thread1");

OutputClass out2=new OutputClass("Thread2");

Thread T1=new Thread(out1);

Thread T2=new Thread(out2);

T1.start();

T2.start();

}

}

/×說明:這裡創建了2個執行緒,運行結果如下:

Thread1

Thread2

Thread1

Thread2

Thread1

Thread2

×/

這裡不一定是交替運行的,有各種可能順序,但是他們一定都會執行。

相關詞條

相關搜尋

熱門詞條

聯絡我們