OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6640|回复: 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));
        }
}       

最佳答案

查看完整内容[请看2#楼]

emwin官方仿真程序中的WIDGET_GraphXY.c就是一个很好的例子,可以在while中更新数据,我的程序就是根据那个改的。连WM_CreateTimer都省了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2017-2-6 17:24:15 | 显示全部楼层
emwin官方仿真程序中的WIDGET_GraphXY.c就是一个很好的例子,可以在while中更新数据,我的程序就是根据那个改的。连WM_CreateTimer都省了。
回复

使用道具 举报

头像被屏蔽

8

主题

95

帖子

0

精华

禁止发言

积分
349
金钱
349
注册时间
2016-12-8
在线时间
88 小时
发表于 2017-2-6 17:31:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

头像被屏蔽

8

主题

95

帖子

0

精华

禁止发言

积分
349
金钱
349
注册时间
2016-12-8
在线时间
88 小时
发表于 2017-2-6 17:37:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2015-10-2
在线时间
59 小时
 楼主| 发表于 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 小时
 楼主| 发表于 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));
        }
}       
回复

使用道具 举报

头像被屏蔽

8

主题

95

帖子

0

精华

禁止发言

积分
349
金钱
349
注册时间
2016-12-8
在线时间
88 小时
发表于 2017-2-7 10:53:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2017-3-3 23:50:37 | 显示全部楼层
呵呵,不客气,我正在用,开了N个窗口,底层窗口不影响更新数据。
回复

使用道具 举报

20

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

学习了
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-10-16
在线时间
12 小时
发表于 2017-4-18 08:38:34 | 显示全部楼层
这个问题学习了 ,我最近也遇到了
回复

使用道具 举报

4

主题

66

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3324
金钱
3324
注册时间
2016-11-9
在线时间
296 小时
发表于 2017-4-19 08:08:38 | 显示全部楼层
顶一下吧,...
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-6-24
在线时间
23 小时
发表于 2017-7-24 17:53:09 | 显示全部楼层
这个问题我个人觉得,可能是句柄没有被释放,在你程序的那里有个While(1){GUI_Delay(100)}这里有点问题,你可以进行修改一下。
回复

使用道具 举报

11

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2016-1-5
在线时间
208 小时
发表于 2018-11-6 21:30:44 | 显示全部楼层
WIDGET_GraphXY.c这个在哪可以找到呀
回复

使用道具 举报

11

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2016-1-5
在线时间
208 小时
发表于 2018-11-6 21:31:58 | 显示全部楼层
physh 发表于 2017-3-3 23:50
呵呵,不客气,我正在用,开了N个窗口,底层窗口不影响更新数据。


WIDGET_GraphXY.c这个在哪可以找到呀
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-8-21
在线时间
5 小时
发表于 2018-11-8 09:55:49 | 显示全部楼层
WM_CreateTimer() 可以看看这个函数。
回复

使用道具 举报

1

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2018-11-7
在线时间
16 小时
发表于 2018-11-8 11:43:40 | 显示全部楼层
学习了!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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