From 637b5145c12ac150a00026e4929cace1ec3e593d Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期四, 12 三月 2020 19:44:49 +0800 Subject: [PATCH] 闭包初步测试通过 --- shmqueue.go | 58 ++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 36 insertions(+), 22 deletions(-) diff --git a/shmqueue.go b/shmqueue.go index c819298..f926652 100644 --- a/shmqueue.go +++ b/shmqueue.go @@ -17,7 +17,8 @@ //Element info type ElemInfo struct { - ShmId int + PicId int + InfoId int } //queue info @@ -38,10 +39,10 @@ type EsQueueInfo struct { EsCaches []esCache - ShmKey int - ShmID int - ShmData []byte - Queue *esQueue + ShmKey int + ShmID int + ShmData []byte + Queue *esQueue } // ptr2esCache convert unsafe.Pointer to []esCache @@ -87,23 +88,23 @@ q.putPos = 0 q.getPos = 0 - fmt.Println("int(q.capacity)",int(q.capacity)) + fmt.Println("int(q.capacity)", int(q.capacity)) eqi.EsCaches = ptr2esCache(unsafe.Pointer(&q.cache), int(q.capacity)) fmt.Printf("EsCaches:%p\n", &eqi.EsCaches) fmt.Printf("EsCaches[0]:%p\n", &(eqi.EsCaches[0])) fmt.Printf("EsCaches[1]:%p\n", &(eqi.EsCaches[1])) - fmt.Println("int(q.capacity)",int(q.capacity)) + fmt.Println("int(q.capacity)", int(q.capacity)) for i := 0; i < int(q.capacity); i++ { fmt.Println("i", i) - fmt.Printf("EsCaches[%d]:%p\n", i, &(eqi.EsCaches[i])) - fmt.Printf("EsCaches[%d].getNo:%p\n", i, &(eqi.EsCaches[i].getNo)) - fmt.Printf("EsCaches[%d].putNo:%p\n", i, &(eqi.EsCaches[i].putNo)) + fmt.Printf("EsCaches[%d]:%p\n", i, &(eqi.EsCaches[i])) + fmt.Printf("EsCaches[%d].getNo:%p\n", i, &(eqi.EsCaches[i].getNo)) + fmt.Printf("EsCaches[%d].putNo:%p\n", i, &(eqi.EsCaches[i].putNo)) eqi.EsCaches[i].getNo = uint32(i) eqi.EsCaches[i].putNo = uint32(i) - fmt.Printf("cache.putNo:%p\n", &(eqi.EsCaches[i].putNo)) - fmt.Printf("cache.putNo:%p\n", &(eqi.EsCaches[i].putNo)) + fmt.Printf("cache.putNo:%p\n", &(eqi.EsCaches[i].putNo)) + fmt.Printf("cache.putNo:%p\n", &(eqi.EsCaches[i].putNo)) fmt.Println("cache:", eqi.EsCaches[i]) } cache := &eqi.EsCaches[0] @@ -112,13 +113,13 @@ fmt.Println("cache:", cache) cache0 := eqi.EsCaches[0] - fmt.Printf("cache0:%p\n", &(cache0)) + fmt.Printf("cache0:%p\n", &(cache0)) fmt.Printf("cache0.getNo:%p\n", &(cache0.getNo)) fmt.Printf("cache0.putNo:%p\n", &(cache0.putNo)) fmt.Println("cache0:", cache0) cache1 := eqi.EsCaches[1] - fmt.Printf("cache1:%p\n", &(cache1)) + fmt.Printf("cache1:%p\n", &(cache1)) fmt.Printf("cache1.getNo:%p\n", &(cache1.getNo)) fmt.Printf("cache1.putNo:%p\n", &(cache1.putNo)) fmt.Println("cache1:", cache1) @@ -129,7 +130,7 @@ eqi.ShmID = shmid eqi.ShmKey = key eqi.Queue = q - time.Sleep(10*time.Second) + time.Sleep(10 * time.Second) return &eqi } @@ -143,7 +144,7 @@ shmdata := bytes2shmEsQueue(data) fmt.Println("shmdata:", shmdata) eqi.EsCaches = ptr2esCache(unsafe.Pointer(&shmdata.cache), int(shmdata.capacity)) - //fmt.Println("EsCaches:", eqi.EsCaches) + fmt.Println("EsCaches:", eqi.EsCaches) eqi.Queue = shmdata eqi.ShmKey = key @@ -155,12 +156,13 @@ // ReleaseQueue detach an exist shm queue func (eqi *EsQueueInfo) ReleaseQueue() { - fmt.Println("ReleaseQueue: key", eqi.ShmKey) + fmt.Printf("ReleaseQueue: key=%x\n", eqi.ShmKey) DestroyShm(eqi.ShmData) } // RemoveShmId remove an exist shm queue (ipcrm -m shmid) func (eqi *EsQueueInfo) RemoveShmId() error { + fmt.Printf("RemoveShmId: key=%x\n", eqi.ShmKey) return shm.Rm(eqi.ShmID) } @@ -193,6 +195,19 @@ } return int(quantity) +} + +// Status status of shm queue +func (eqi *EsQueueInfo) QueueElements() []ElemInfo { + var elems []ElemInfo + + for i := 0; i < len(eqi.EsCaches); i++ { + if eqi.EsCaches[i].value.PicId != 0 && eqi.EsCaches[i].value.InfoId != 0 { + elems = append(elems, eqi.EsCaches[i].value) + } + } + + return elems } // Put 鍗曟鍐欏叆锛屽彲鑳藉け璐� @@ -258,7 +273,7 @@ return ok, qua } - to := time.NewTimer(time.Duration(timeout)*time.Millisecond) + to := time.NewTimer(time.Duration(timeout) * time.Millisecond) defer to.Stop() for { @@ -309,7 +324,7 @@ putNo := atomic.LoadUint32(&cache.putNo) if getPosNew == getNo && getNo == putNo-eqi.Queue.capacity { val := cache.value - cache.value = ElemInfo{ShmId:0} + cache.value = ElemInfo{PicId: 0} atomic.AddUint32(&cache.getNo, eqi.Queue.capacity) return val, true, int(posCnt - 1) } else { @@ -336,13 +351,13 @@ return val, ok, qua } - to := time.NewTimer(time.Duration(timeout)*time.Millisecond) + to := time.NewTimer(time.Duration(timeout) * time.Millisecond) defer to.Stop() for { select { case <-to.C: - return ElemInfo{},false, 0 + return ElemInfo{}, false, 0 default: val, ok, qua = eqi.Get() if ok { @@ -365,4 +380,3 @@ v++ return v } - -- Gitblit v1.8.0