2010-03-17 111 views
4

如何使用C++託管代碼將程序暫停幾毫秒? 我試過Sleep(),但是當我包含winbase.h文件時它不工作,我有很多編譯錯誤!如何將程序暫停幾毫秒?

for(int i=0; i<10; i++) 
{ 
    simpleOpenGlControl1->MakeCurrent(); 
    System::Threading::Thread::Sleep(100); 
     theta_rotated += 2.0* 3.141592653/(double)Model->size()/10.0; 

    simpleOpenGlControl1->Invalidate(); 
} 

private: System::Void simpleOpenGlControl1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) 
     { 

      Gl::glMatrixMode(Gl::GL_MODELVIEW); 
      Gl::glLoadIdentity(); 
      Gl::glClearColor(1, 1, 1, 1); 
      Gl::glClear(Gl::GL_COLOR_BUFFER_BIT | Gl::GL_DEPTH_BUFFER_BIT); 
      camera->Tellgl(); 
      Gl::glRotated(Angle,X,Y,Z); 
      RenderModels(); 
     } 
void RenderModels(void) 
{ 
    Points = gcnew System::Collections::Generic::List<Point>(); 
    Point p(0,0) ; 
    int t = -5; 
    double r = 5; 
    double x, z, theta; 
    for(int i = 0;i < Model->size();i++) 
    { 
     theta = i*2* 3.141592653/ (double)Model->size(); 
     x = r*sin(theta + theta_rotated); 
     z = r*cos(theta + theta_rotated); 
     Gl::glPushMatrix(); 
     Gl::glTranslated(x,0,z); 
     Model->at(i).Render(); 
     p.X=x; 
     p.Y=0; 

     Points->Add(p); 
     t +=1; 
     Gl::glPopMatrix(); 
    } 
    //simpleOpenGlControl1->Invalidate(); 
} 

回答

3

System::Threading::Thread::Sleep()在另一個答覆中提到。但是讓我警告你,這不是確切的,對於小的(毫秒)睡眠是非常不精確的。考慮你的應用程序與其他應用程序和線程一起運行,他們都希望處理器時間。

+0

我使用的是openGL,您認爲openGL使用另一個線程,因爲我覺得應用程序變慢了,但openGL的渲染不會暫停!那麼有什麼可以暫停所有線程? –

+0

opengl渲染髮生在單獨的線程中。我們最終的目標是什麼?請詳細說明 – Andrey

+0

我正在更新for循環中某個模型的位置,並希望循環在更新新位置之前暫停一段時間,以使模型顯示爲正在移動。我正在粘貼上面的一些代碼。謝謝。 –

4
+0

我使用的是openGL,你認爲openGL使用另一個線程,因爲我覺得應用程序變慢,但openGL的渲染不會暫停! –

+0

OpenGL可能在您的圖形處理器上運行 - 因此可能無法以這種方式進行宕機。但我真的不知道。 –

-2
#include <unistd.h> 

main() {  
    usleep(2000); // 2 msecs 
} 

閱讀手冊頁;-) 男子3 usleep

+2

「managed-C++」的手冊頁。新東西 – Andrey

+1

'man'不被識別爲內部或外部命令, 可操作的程序或批處理文件。 – Bill

+2

你知道,有些人會說,當他們提及與OP詢問的相同的語言和平臺時,答案會更有幫助;;) – jalf