Go1.10用Go函數控制C函數的生命週期

package main

import (
    "context"
    "syscall"
    "time"
    "unsafe"
)

/*
int goexit(void* func)
{
    ((int (*)())func)();
    return 0;
}
*/
import "C"

func main() {
    go func() {
        time.Sleep(10e9)
        can()
    }()
    ptr := syscall.NewCallback(wait)
    C.goexit(unsafe.Pointer(ptr))
}

var ctx, can = context.WithCancel(context.Background())

func wait() int {
    <-ctx.Done()
    return 0
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章