chenshijun
2020-04-24 b4f186a5d496fd2085a2bf1405a6384cd7802236
把延时单位修正成const=5毫秒,增加CreateShmOnlyTime接口
1个文件已修改
36 ■■■■ 已修改文件
shmwrap.go 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shmwrap.go
@@ -7,6 +7,8 @@
    "github.com/gen2brain/shm"
)
const sleepPeriod = time.Duration(5) * time.Millisecond
// NewBlock shm block with size
func NewBlock(size int, key int) ([]byte, int, error) {
    id, err := shm.Get(key, size, shm.IPC_CREAT|0666)
@@ -72,7 +74,7 @@
                if err == nil {
                    break loopB
                }
                time.Sleep(time.Millisecond)
                time.Sleep(sleepPeriod)
                data, id, err = NewBlock(size, key)
            }
        }
@@ -93,7 +95,7 @@
                if err == nil {
                    break loopB
                }
                time.Sleep(time.Millisecond)
                time.Sleep(sleepPeriod)
                data, id, err = AttachBlock(key)
            }
        }
@@ -115,7 +117,33 @@
                if err == nil {
                    break loopB
                }
                time.Sleep(time.Millisecond)
                time.Sleep(sleepPeriod)
                id, err = NewBlockOnly(size, key)
            }
        }
    }
    return id
}
// CreateShmOnly create shm block with size, only space, no padding, return id(int)
// context for quit
func CreateShmOnlyTime(ctx context.Context, size int, key int, timeout int) int {
    id, err := NewBlockOnly(size, key)
    if err != nil {
        to := time.NewTimer(time.Duration(timeout) * time.Millisecond)
        defer to.Stop()
    loopB:
        for {
            select {
            case <-ctx.Done():
                return -1
            case <-to.C:
                return -1
            default:
                if err == nil {
                    break loopB
                }
                time.Sleep(sleepPeriod)
                id, err = NewBlockOnly(size, key)
            }
        }
@@ -139,7 +167,7 @@
                } else {
                    fmt.Println("createShm error:", err)
                }
                time.Sleep(time.Millisecond)
                time.Sleep(sleepPeriod)
                data, id, err = NewBlock(size, key)
            }
        }