Yield(編程術語)

Yield(編程術語)

本詞條是多義詞,共3個義項
更多義項 ▼ 收起列表 ▲

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

基本介紹

  • 外文名:Yield
  • 返回值:Boolean
  • 形式:yield return <expression>;
  • 在 iterator :用作方法、運算符或訪問器的體
語法,例子,

語法

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
×/
這裡不一定是交替運行的,有各種可能順序,但是他們一定都會執行。

相關詞條

熱門詞條

聯絡我們