|
|
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build windows
package svc
import ( "errors"
"golang.org/x/sys/windows" )
// event represents auto-reset, initially non-signaled Windows event.
// It is used to communicate between go and asm parts of this package.
type event struct { h windows.Handle }
func newEvent() (*event, error) { h, err := windows.CreateEvent(nil, 0, 0, nil) if err != nil { return nil, err } return &event{h: h}, nil }
func (e *event) Close() error { return windows.CloseHandle(e.h) }
func (e *event) Set() error { return windows.SetEvent(e.h) }
func (e *event) Wait() error { s, err := windows.WaitForSingleObject(e.h, windows.INFINITE) switch s { case windows.WAIT_OBJECT_0: break case windows.WAIT_FAILED: return err default: return errors.New("unexpected result from WaitForSingleObject") } return nil }
|