2017-06-06 50 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

@Ðаn有沒有辦法減去或計算兩個日期時間值在C++/cli中的差異? 謝謝 – 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++/CLI中構建它,它與C++不同。這是行不通的。我試過了,它也給我帶來了錯誤。 – 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秒。

或者我看到人們使用

Thread::Sleep(100); 

在CLI方面。

+1

比CPU Hogging循環恕我直言更好。 – NathanOliver

+0

請注意,還有['std :: this_thread :: sleep_for'](http://en.cppreference.com/w/cpp/thread/sleep_for) – NathanOliver

+0

@fluffy由於這是針對C++/CLI的windforms應用程序,我不得不把代碼放在「public ref class MyForm:public System :: Windows :: Forms :: Form {public:}」而不是「int main(){}」中 我不認爲這個方法適用於我的應用程序。 我試圖把代碼放在back ticks中,但是由於某些原因它沒有工作。 – eString

相關問題