2017-06-06 13 views
1
void Wait(Single wait_time) 
{ 
    Single start_time; 
    Single end_time; 
    Single ellapsed_time; 

    ellapsed_time = 0; 
    start_time = DateTime.Now.Second; 
    while (ellapsed_time<=wait_time) 
    { 
     end_time = DateTime.Now.Second; 
     ellapsed_time = end_time - start_time; 
    } 
} 

上記のコードはC#であり、私の同僚によると動作します。目標は、マシンに一定の時間待つように指示し、その後に続けます。たとえば、Wait(5)がトリガーされると、マシンは経過時間が5より長くなるまで継続しません。私はC++/CLIで同じことをしようとしています。ここに私のコードは次のとおりです。経過時間を見つける方法

void Wait(Single wait_time) 
{ 
    Single start_time; 
    Single end_time; 
    Single ellapsed_time; 


    ellapsed_time = 0; 
    start_time = DateTime::Now; 

    while (ellapsed_time <= wait_time) { 
     end_time = DateTime::Now; 
     ellapsed_time = end_time - start_time; 

    } 


} 

私はこのエラーを取得する:

no suitable conversion function from System::DateTime to float exists

私もTimeSpanを試してみましたが、それは動作しませんでした。これを行うより良い方法はありますか?

+0

@ÐаnC++/cliの2つのdatetime値の差を減算または計算する方法はありますか? ありがとう – eString

答えて

2

C++/CLI

using namespace System::Threading; 

void wait(int seconds) 
{ 
    //1000 miliseconds = 1 second 
    Thread::Sleep(seconds * 1000); 
} 

int main() 
{ 
    std::cout << "test1" << std::endl; 
    wait(5); // wait for 5 secs 
    std::cout << "test2" << std::endl; 
} 

サイドノートには、冗長ループを通過する貴重なCPUサイクルを無駄にしたくないでしょう。それは休憩を与える!

+0

@ Kaan Agac私はC++とは異なるC++/CLIで構築しています。これはうまくいかないでしょう。私はそれを試して、それも私にエラーを与えた。 – eString

+0

@eString編集したバージョンを試してください。これをC++/CLIで実行することができました。混乱させて申し訳ありません。 –

1

C#

System.Threading.Thread.Sleep(5000); 

C++

#include <chrono> 
#include <thread> 

int main() { 
using namespace std::this_thread; 
using namespace std::chrono; 
sleep_until(system_clock::now() + seconds(5)); 
} 

上記のコードは、5秒間のアプリケーションの睡眠を行います。

または私は見ている人は、CLIの面では

Thread::Sleep(100); 

を使用しています。

+1

CPUホギングループIMHOよりもずっと優れています。 – NathanOliver

+0

また、['std :: this_thread :: sleep_for'](http://en.cppreference.com/w/cpp/thread/sleep_for)もあることに注意してください。 – NathanOliver

+0

@fluffyこれはC++/CLI風フォームアプリケーションのためですので、私はコードを "public ref :: MyForm:public System :: Windows :: Forms :: Form {public:}"の代わりに "int main(){}"の中に入れなければなりません 私はこのメソッドがうまくいくとは思わない私のアプリケーション。 コードをバックティックの内側に入れようとしましたが、何らかの理由でうまく動作しませんでした。 – eString

関連する問題