2017-02-07 3 views
0

Mon code sur Windows utilisé P/Invoke pour appeler GetTickCount64() de kernel32.dll Cela ne fonctionne pas sous Mono sur Ubuntu Server 14 - Je reçois EntryPointNotFoundException.Comment puis-je obtenir la disponibilité du système en Mono sur Ubuntu Server?

Il y a this approach en utilisant PerformanceCounter. Il fonctionne sur Windows mais quand je l'utilise sous Linux avec le nom du compteur/la catégorie réglé à System/System Up Time, il ne donne pas de temps à tout le temps. Donc ça ne marche pas aussi.

Environment.Tickount fonctionne de la même manière que sur Windows, mais il déborde tous les 47 jours et cela peut avoir des résultats confus pour mon utilisation, donc je préfère un compteur 64 bits.

Comment puis-je faire fonctionner le système en code C# avec Mono sur Ubuntu Server?

+0

Utiliser Linux natif façon puis, http://stackoverflow.com/questions/1540627/what-api-do-i-call-to-get-the-system-uptime –

+0

@LexLi Comment puis-je commencer avec cela en code C#? – sharptooth

+0

Google comment faire PInvoke sur Mono. Pas beaucoup de différence par rapport à ce que vous faites sur Windows. –

Répondre

0

User Lex Li lié à ce closely related question pour le code C.

Parmi les réponses est this one qui suggère la lecture de /proc/uptime. C'est juste génial pour le code C# - il peut utiliser File.ReadAllText(), puis analyser la chaîne résultante.

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