2013-08-08 5 views
0

제목은 모두 내 C# 게임 에뮬레이터/응용 프로그램에 타이머를 추가하고 타이머가이 프로그램의 실행 시간을 확인하기를 원했지만 얼마나 오래 실행했는지를 나타 내기 위해 타이머를 원했습니다. 내가 몇 초 동안로드되었는지 확인할 수 있도록 카운트 다운하지 마라. 많은 자습서를 시도했지만 아무 것도 작동하지 않습니다.C# 콘솔 응용 프로그램 타이머

타이머를 추가하는 중 코드가 입력되지 않아 입력이 완료되면 해당 입력란에 빨간색 줄이 나타납니다.

//uptime 
     Timer timer = new Timer(); 
     timer.Interval = 60 * 1000; 
     timer.Enabled = true; 
     timer.tick(); 
     timer.Start(); 
+3

코드 .. 제발 ..? – Gerald

+1

실제로 우리가 당신을 도울 수 있도록 귀하의 코드를 볼 필요가 있습니다. – Jordy

+0

Ive는 게시물에 코드를 추가 했으므로 ive를 보았을 때 간단히 tmer를 만났을 때 볼 수 있듯이 (아직 추가하지 않고 추가하지 않았 음) 아직 간단한 타이머 –

답변

2

가동 시간을 맞추기 위해 타이머를 사용하고 싶지는 않습니다. 타이머는 정확히 매초마다 발사하기를 기대하기에는 너무 신뢰할 수 없습니다. 그래서 그냥뿐만 아니라 당신이 전화 GetProcessTimes를 사용할 수있는 API 함수()이 있음입니다 :

http://msdn.microsoft.com/en-us/library/windows/desktop/ms683223%28v=vs.85%29.aspx

PInvoke를 문은 다음과 같습니다

[DllImport("kernel32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool GetProcessTimes(IntPtr hProcess, out FILETIME lpCreationTime, out FILETIME lpExitTime, out FILETIME lpKernelTime, out FILETIME lpUserTime); 

는 클래스 내에이 문을 넣습니다. 마지막으로

private DateTime FileTimeToDateTime(FILETIME fileTime) 
    { 
     ulong high = (ulong)fileTime.dwHighDateTime; 
     unchecked 
     { 
      uint uLow = (uint)fileTime.dwLowDateTime; 
      high = high << 32; 
      return DateTime.FromFileTime((long)(high | (ulong)uLow)); 
     } 
    } 

의 샘플 사용 : 다음과 같다

using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME; 
using System.Runtime.InteropServices; 

기능은 날짜 시간에 FILETIME을 변환하려면 다음과 같이 이러한 유형을 찾을 수있는 컴파일러가 필요

수입품은 이 두 기능은 다음과 같습니다 :

using System.Diagnostics; 

void ShowElapsedTime() 
{ 

     FILETIME lpCreationTime; 
     FILETIME lpExitTime; 
     FILETIME lpKernelTime; 
     FILETIME lpUserTime; 

     if (GetProcessTimes(Process.GetCurrentProcess().Handle, out lpCreationTime, out lpExitTime, out lpKernelTime, out lpUserTime)) 
     { 
      DateTime creationTime = FileTimeToDateTime(lpCreationTime); 
      TimeSpan elapsedTime = DateTime.Now.Subtract(creationTime); 
      MessageBox.Show(elapsedTime.TotalSeconds.ToString()); 
     } 
} 
+0

나는 코드/프로그램 1 %, 어리석은 C# 그냥 초보자가 datetime 함께 할 수있는 아무것도 없다는 것을 이해하지 못했습니까? –

+0

@AshleySmith, 초보자 인 경우 datetime 및 timespan을 사용하여 가동 시간을 얻을 수 있습니다 (그러나 StopWatch는 타이밍을 위해 특별히 설계되었습니다). 나는 당신이 마이크로 초의 정확성을 원하지 않는다고 생각합니다. 이것은 모범 사례와는 거리가 있습니다. 그러나 좀 더 고급화되면 PInvoke가 정말 편리하다는 것을 알게 될 것입니다. www.pinvoke.net에는 많은 훌륭한 예제가 있습니다. – Jordy

+0

원본 게시물을 코드 예제로 확장했습니다. 모든 "사용하는"문장을 함께 그룹화하는 것을 잊지 마십시오. "using System.Diagnostics"문을 사용하면 Process 클래스를 사용할 수 있습니다. 이 중 일부를 이해하려면 "PInvoke"와 내가 제공 한 GetProcessTimes()에 대한 참조를 찾아보십시오. –

관련 문제