2016-09-19 3 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); 
} 
  • ので、いくつかの編集をした後、これは私が欲しいものに最も近いを持っている - 私は試してみて、実際の経過時間を取得する場合しかし、それはゴミ値を出力します。 >=<あるべき

答えて

2

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

現在、要求が行われるまで、あなたは降伏することなくそのループに詰まっています。それから、次のifブロックをスキップして、同じコールでelapsedTimeチェックを実行します。これは、降伏することなく、UnityのTimeに関する限り、時間差はゼロになります。

+1

これは問題ではありません – Programmer

+0

はい、正しいです。これは実際には問題です。+ 1タイムアウト(ConnectionTimeoutInterval)に達したときにこの関数を終了するには、これを修正する必要があります。あなたの現在の答えはそれをしません。私はその理由がif文を持っている理由だと思う。 – Programmer

+0

私の問題は計算ではありません。そのため、elasedTimeにはガベージ・バリューが出てきます –

関連する問題