2017-02-07 17 views
0

WindowsのコードがP/Invokeを使用してkernel32.dllからGetTickCount64()を呼び出しました。これはUbuntu Server 14のMonoでは動作しません - EntryPointNotFoundExceptionを取得します。Ubuntu ServerでMonoでシステムの稼働時間を取得するにはどうすればよいですか?

this approachがあります。PerformanceCounterです。 Windows上で動作しますが、カウンタ名/カテゴリがSystem/System Up Timeに設定されているLinux上で使用すると、常に0回の時間間隔が得られます。だからそれはあまりにも機能しません。

Environment.TickountはWindowsと同じように動作しますが、47日ごとにオーバーフローし、私のusecaseの結果が混乱する可能性があります。したがって、64ビットカウンタを使用することをお勧めします。

Ubuntu ServerでMonoを実行しているC#コードでシステムの稼働時間を取得するにはどうすればよいですか?

+0

使用Linuxネイティブの方法、その後、http://stackoverflow.com/questions/1540627/what-api-do-i-call-to-get-the-system-uptime –

+0

@LexLiどうやって始めるのですC#コードでそれを行うと? MonoでPInvokeを実行する方法については – sharptooth

+0

をご覧ください。 Windows上での作業と比べて大きな違いはありません。 –

答えて

0

User Lex LiこれはCコードのclosely related questionにリンクされています。

回答のうちthis oneは、/proc/uptimeから読んでいます。これはC#コードではちょうどいいです - それはFile.ReadAllText()を使用して、結果の文字列を解析することができます。

var uptimeText = File.ReadAllText("/proc/uptime"); 
// Now split the string to extract the first component, 
// parse it as double and use TimeSpan.FromSeconds() 
関連する問題