usage_windows.go 690 B

12345678910111213141516171819202122232425262728293031323334
  1. package sysinfo
  2. import (
  3. "syscall"
  4. "time"
  5. )
  6. func filetimeToDuration(ft *syscall.Filetime) time.Duration {
  7. ns := ft.Nanoseconds()
  8. return time.Duration(ns)
  9. }
  10. // GetUsage gathers process times.
  11. func GetUsage() (Usage, error) {
  12. var creationTime syscall.Filetime
  13. var exitTime syscall.Filetime
  14. var kernelTime syscall.Filetime
  15. var userTime syscall.Filetime
  16. handle, err := syscall.GetCurrentProcess()
  17. if err != nil {
  18. return Usage{}, err
  19. }
  20. err = syscall.GetProcessTimes(handle, &creationTime, &exitTime, &kernelTime, &userTime)
  21. if err != nil {
  22. return Usage{}, err
  23. }
  24. return Usage{
  25. System: filetimeToDuration(&kernelTime),
  26. User: filetimeToDuration(&userTime),
  27. }, nil
  28. }