[golang/govcl]govcl 组件在 defer 中的异常
clq
浏览(350) -
2024-02-07 19:20:39 发表
编辑
关键字:
[golang/govcl]govcl 组件在 defer 中的异常
升级到 go 1.21.6 后发现定时器的闭包函数中不能使用 defer 设置 enable
//应该在主窗体中初始化时就调用了
//这个版本比 v2 慢,适合要求不高又必须有的地方
func run_in_ui_govcl_v3_all_ontime_init() {
//go 1.21.6 下有问题
//return;
time := vcl.NewTimer(nil);
time.SetInterval(100);
g_govcl_ontimer_all = time;
in_thread := false; //理论上应该加锁
//func_list := run_in_ui_govcl_v3_all_ontime_GeFuncList();
time.SetOnTimer(func(sender vcl.IObject) {
//defer time.SetEnabled(true); ////奇怪 go 1.21.6 下有问题
//time.SetEnabled(false); //先禁用再恢复
//---------
// defer g_govcl_ontimer_all_lock.Unlock(); //不行,这样会死机的
if (true == in_thread) { return; } //线程还没执行完
defer func (){ in_thread = false;}();
//time.Free();
//ui_run();
func_list := run_in_ui_govcl_v3_all_ontime_GeFuncList(); //感觉不是很好,不过好像暂时能用
for i := func_list.Front();i != nil;i = i.Next() {
//fmt.Println("Element =", i.Value)
item := i.Value;
func_ := item.(g_govcl_ontimer_all_FUNC);
func_();
}//
});
// go func () {
// in_thread = true;
// //buf := HttpGet_TimeOut(url, 5);
// //buf = HttpGet_TimeOut(url, 5);
// thread_run();
// in_thread = false;
// }();
}//
本帖子属于以下条目()
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.