2016-09-19 70 views
0

所以標題說明了這一切 - 但是我嘗試的方法似乎不起作用,我不知道爲什麼。計算從客戶端到服務器請求數據所花費的時間 - Unity

public static IEnumerator RetrieveCharacterData(string userid, Action<string> charSelectResponse) 
{ 
    WWWForm data = new WWWForm(); 
    data.AddField("userid", userid); 

    // Send request to server 
    WWW characterSelectRequest = new WWW(Helper.Constants.kCharacterSelectUrl, data); 
    float elapsedTime = 0.0f; 

    while (!characterSelectRequest.isDone) 
    { 
     elapsedTime += Time.deltaTime; 

     Debug.Log(elapsedTime); // This prints in real time the correct data 

     if (elapsedTime >= Helper.Constants.ConnectionTimeoutInterval) 
     { 
      Debug.Log("Server error: Connection has timed out."); 
      yield return null; 
     } 
    } 

    // This doesn't work - prints out garbage values 
    Debug.Log(elapsedTime); 


    if (!characterSelectRequest.isDone || !string.IsNullOrEmpty(characterSelectRequest.error)) 
    { 
     charSelectResponse.Invoke(null); 
     yield break; 
    } 
    charSelectResponse.Invoke(characterSelectRequest.text); 
} 
  • 所以有些編輯後,這已經讓我最接近我想要的東西 - 但是當我嘗試並取得實際elapsedTime,它打印出垃圾值。

回答

2

if (Time.time - startTime >= Helper.Constants.ConnectionTimeoutInterval)

>=應該是<

目前,您在被請求完成之前一直停留在那個循環中而沒有讓步。然後它跳過下一個if塊,並結束在相同的調用中執行elapsedTime檢查,而不會產生任何結果,從而導致Unity Time的時間差爲零。

+1

這不是問題 – Programmer

+0

是的,你是對的。這實際上是問題+ 1雖然,您需要解決此問題以在達到超時(ConnectionTimeoutInterval)時退出該函數。你目前的答案不會那樣做。我認爲這就是爲什麼有if語句。 – Programmer

+0

我的問題不是計算,這就是爲什麼elasedTime出現垃圾值... –

相關問題