OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8965|回复: 18
打印 上一主题 下一主题

关于EMWIN中EDIT编辑框实时更新数据的问题

[复制链接]

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
跳转到指定楼层
楼主
发表于 2017-2-6 17:24:14 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
2金钱
我想在EDIT编辑框中实时更新数据,但是我将下代码标红的语句放在while循环里 切换界面就死机,不放在while里 数据就不能实时刷新,有没有之前也遇到过的,一起交流交流,代码如下:
WM_HWIN CreateCK_1(void);
WM_HWIN CreateCK_1(void) {
  WM_HWIN hWin;
  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
       
  return hWin;
}

// USER START (Optionally insert additional public code)
// USER END


void MainTask(void)
{
        GUI_Init();
        CreateCK_1();
        EDIT_SetText(hEDIT1,(char *)buf);
        while(1)
        {
               
          GUI_Delay(100);
//          memset(buf,0,sizeof(buf));
        }
}       

回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
2#
 楼主| 发表于 2017-2-6 17:32:34 | 显示全部楼层
charlefu 发表于 2017-2-6 17:31
我只能估计一下,你的WM_Exec是另外一个线程调用的吧。如果你这个线程优先级较高,会打断WM_Exec线程。然后 ...

我用的ucos ,应该不会出现那种情况吧
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
3#
 楼主| 发表于 2017-2-7 09:11:21 | 显示全部楼层
charlefu 发表于 2017-2-6 17:37
这个和用啥OS没什么关系。简单验证的话你把MainTask优先级调低,然后EDIT_SetText(hEDIT1,(char *)buf); ...

不行,还是死,死在了创建窗口2的创建对话框那里
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
4#
 楼主| 发表于 2017-2-7 10:09:48 | 显示全部楼层
经过处理解决l,一开始我是将以下标红部分放在MAINtask里,但是会出现一个问题,当切换到窗口2后,新的窗口函数会与这句EDIT_SetText(hEDIT1,(char *)buf)发生冲突,那怎么办呢,我又将EDIT_SetText(hEDIT1,(char *)buf)放在窗口1函数中,发现切换之后,还会死在窗口2创建结束之后,那么可能是EDIT_SetText(hEDIT1,(char *)buf)这句话与创建对话框函数起冲突,所以我试了一下,创建阻塞式对话框。果然这样就行了。但是具体的机制,我还是不太明白。希望有大神能帮我解答一下。万分感激
void MainTask(void)
{
//        GUI_Init();
        CreateCK_1();
       
        while(1)
        {
//EDIT_SetText(hEDIT1,(char *)buf);
          GUI_Delay(100);
//          memset(buf,0,sizeof(buf));
        }
}       
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
5#
 楼主| 发表于 2017-2-7 11:51:17 | 显示全部楼层
charlefu 发表于 2017-2-7 10:53
看你的描述都晕了。给你一个建议吧:只在一个线程里面更新GUI,会减少很多问题。

你的意思是,可以在一个线程里写两个回调函数,分别调用,用于创建窗口和切换窗口这样?
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
6#
 楼主| 发表于 2017-3-3 08:15:02 | 显示全部楼层
physh 发表于 2017-3-2 22:39
emwin官方仿真程序中的WIDGET_GraphXY.c就是一个很好的例子,可以在while中更新数据,我的程序就是根据那个 ...

谢谢  ,现在我也发现仿真库的实验写的比较好
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
7#
 楼主| 发表于 2017-3-4 08:06:46 | 显示全部楼层
physh 发表于 2017-3-3 23:50
呵呵,不客气,我正在用,开了N个窗口,底层窗口不影响更新数据。

学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-6-22 20:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表