社区
界面
帖子详情
setwindowtext的奇怪问题
wjzxj
2007-08-31 09:46:01
我需要实时的刷新程序界面,以改变界面上的一些数据显示,所以我采用静态文本,然后在定时器里面使用setwindowtext来改变这些静态文本的显示。但是程序在运行几个小时就崩溃了,经排查,是由于在定时器中,频繁的执行setwindowtext引起的。不知道是怎么回事,怎么解决。
...全文
852
10
打赏
收藏
setwindowtext的奇怪问题
我需要实时的刷新程序界面,以改变界面上的一些数据显示,所以我采用静态文本,然后在定时器里面使用setwindowtext来改变这些静态文本的显示。但是程序在运行几个小时就崩溃了,经排查,是由于在定时器中,频繁的执行setwindowtext引起的。不知道是怎么回事,怎么解决。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wjzxj
2007-08-31
打赏
举报
回复
运行几个小时没有问题,但是4个多小时就出现问题了
wjzxj
2007-08-31
打赏
举报
回复
使用setwindowtext的静态文本,我在OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)中,还修改了他们的背景颜色
knightshenbin
2007-08-31
打赏
举报
回复
楼主的结论应该是错误的,我的程序里面也在ontimer里面用过setwindowtext,但是没有出过错误,而且我的定时器是100ms的,比LZ的要频繁的多。
wjzxj
2007-08-31
打赏
举报
回复
刚开始使用SetWindowText,出现问题,然后采用AfxSetWindowText,正常运行时间长点,但还是出现问题。现在还在拷机中
wjzxj
2007-08-31
打赏
举报
回复
频繁修改标题,是因为我写的是实时程序,我把OnTimer里面的代码贴出来,
if(!m_WsSendFlag)//电度表通讯正常
{
CString s;
//电度表一
if(m_WsP==0)
{
//如果表一通讯中断,发送通讯恢复到信息窗口
if(!m_Ws0Flag)
{
m_Ws0Flag=TRUE;
if(!m_InfoDlgFlag) OnInfoDlg();
::SendMessage(m_InfoDlg->m_hWnd,WM_USER+21,11,0);
}
//遥测良显示到监视器界面
s.Format("%.2f",m_CT1*Ia/100);
AfxSetWindowText(m_1Ia.GetSafeHwnd(),s);
s.Format("%.2f",m_CT1*Ib/100);
AfxSetWindowText(m_1Ib.GetSafeHwnd(),s);
s.Format("%.2f",m_CT1*Ic/100);
AfxSetWindowText(m_1Ic.GetSafeHwnd(),s);
s.Format("%.2f",m_PT1*Ua/100);
AfxSetWindowText(m_1Ua.GetSafeHwnd(),s);
s.Format("%.2f",m_PT1*Ub/100);
AfxSetWindowText(m_1Ub.GetSafeHwnd(),s);
s.Format("%.2f",m_PT1*Uc/100);
AfxSetWindowText(m_1Uc.GetSafeHwnd(),s);
m_p1=m_PT1*m_CT1*P/100;
m_q1=m_PT1*m_CT1*Q/100;
s.Format("%.2f",m_p1);
AfxSetWindowText(m_1P.GetSafeHwnd(),s);
s.Format("%.2f",m_q1);
AfxSetWindowText(m_1Q.GetSafeHwnd(),s);
}
}
skybluehacker
2007-08-31
打赏
举报
回复
1.可能是你的参数有问题,某个情况下超出字符串长度,溢出;
2.尝试改用PostMessage(WM_SETTEXT...)处理,看看是不是比直接SetText或者用SendMessage好;
(题外话,很少人用Timer来修改窗口标题的,频繁修改的需求不大,如果你只是想要快速检测某一变化的,需要显示出来,最好建立自身的消息机制,一旦需要更新,才触发个消息去更改)
以上建议都尝试过,建议粘贴代码,呵呵。
livedeal
2007-08-31
打赏
举报
回复
代码`
wjzxj
2007-08-31
打赏
举报
回复
我在OnTimer里面把setwindowtext屏蔽掉,就没有问题。定时器的时间间隔为500ms。试过很多次了,在网上看到有的朋友说,频繁更新标题,最好用afxsetwindowtext,我采用afxsetwindowtext来改变标题,程序也崩了,但是比使用setwindowtext,正常运行时间要长些
skybluehacker
2007-08-31
打赏
举报
回复
首先疑惑的是你的trouble shooting结论是否正确,你的排查方式是屏蔽改行代码吗?
还有,你的Timer机制的频繁程度是不是相当的厉害,令系统吃不消,如果负荷过大,考虑优化一下,不然效率也不好啊;
很难相信单单的SetWindowText会让程序崩溃,看看是不是跟其他地方的代码什么引起“冲突”,或者直接使用WM_SETTEXT消息方式去SendMessage()看看,
还是看看你的参数是不是出问题了,譬如字符串传入,而字符串某个时候溢出有效长度等。
good luck !
skybluehacker
2007-08-31
打赏
举报
回复
很可能不是setwindowtext自身的问题,如果可以,你最好用调试模式运行几个小时,等出错误,跟进异常的未知,看堆栈的位置callstatk,看看能不能更加详细定位出问题,说不定是浮点运算出现的异常什么的。
微软订阅邮件
- 组合框控件出现的“
奇怪
”行为可能涉及到控件的初始化、数据绑定等
问题
。 - **关于使用MSSANSSERIF字体**(P.53) - 使用MSSANSSERIF字体可能遇到的
问题
包括字体资源的加载和渲染
问题
。 - **为什么DLL在字符串表...
win32字母按钮 菱形按钮
在Win32 API中,可以通过创建一个带有指定文本的`Create
Window
Ex`函数来实现这样的按钮,并通过`
Set
Window
Text
`函数设置按钮上的文字。 接下来,我们讨论如何实现“菱形按钮”。在标准的Win32 API中,按钮默认为...
CStatic控件的闪烁
问题
最近发现CStatic控件有一个
奇怪
的闪烁
问题
。如果一个界面上有两个CStatic控件,同时动态给改变他们的显示内容。当用别的的窗口挡住其中的一个,则另外一个的显示内容每改变一次就闪一下。移开窗口后现象也不消失。...
window
s sdk编程遇到
奇怪
的
问题
用
window
s sdk编写应用程序遇到一个
奇怪
的
问题
:当代码如下时, case IDC_BUTTON_GETPID: { MessageBox(NULL, "aaa", "aaa", MB_OK); 。。。。。。。。。。 }...
定位MFC程序GDI对象泄漏过程中的一些经验
但
奇怪
的是注释掉
Set
Window
Text
后程序就正常了。后来发现原因在于程序重写了OnCtlColor函数。 HBRUSH CVServerView ::OnCtlColor (CDC * pDC, CWnd * pWnd, UINT nCtlColor) { HBRUSH hbr = CFormView ::...
界面
15,978
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章