代码拉取完成,页面将自动刷新
同步操作将从 greya/go语言自实现协程池 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package main
import (
"fmt"
"reflect"
"time"
)
type MethInfo struct {
ind int
name interface{}
args []interface{}
sign int //0:未运行;1:正在运行;2:运行完成
}
type MessageQueue struct {
methodQueue []*MethInfo
count int
sum int
sign bool
}
func (this MessageQueue) init(count int, sum int) (err error) {
this.count = count
this.sum = sum
this.sign = true
this.methodQueue = make([]*MethInfo, 0, sum)
return
}
//一个存储,一个运行
func (this MessageQueue) inQueue(method interface{}, args []interface{}) {
var methInfo = &MethInfo{0, method, args, 0}
this.methodQueue = append(this.methodQueue, methInfo)
this.count++
}
//运行
func (this MessageQueue) run() {
go func() {
for this.sign {
methInfo := this.methodQueue[0]
if methInfo.sign != 0 {
this.methodQueue = this.methodQueue[1:]
continue
}
methInfo.sign = 1
this.methodRun(methInfo)
this.methodQueue = this.methodQueue[1:]
methInfo.sign = 2
}
}()
}
//函数运行
func (this MessageQueue) methodRun(meth *MethInfo) {
fmt.Println("运行方法", meth.ind)
meth.sign = 1
fun := reflect.ValueOf(meth.name)
var listVal []reflect.Value
for _, v := range meth.args {
listVal = append(listVal, reflect.ValueOf(v))
}
fun.Call(listVal)
fmt.Println("运行方法结束", meth.ind)
meth.sign = 2
}
//关闭
func (this MessageQueue) Close() {
for len(this.methodQueue) != 0 {
time.Sleep(10)
}
this.sign = false
}
func main() {
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。