登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [golang/govcl]govcl 组件在 defer 中的异常     [回主站]     [分站链接]
[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;

// }();

}//






总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
golang的坑 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1