读书人

定时用SetDlgItemText()更新edit导致耗

发布时间: 2012-01-22 22:38:43 作者: rapoo

定时用SetDlgItemText()更新edit导致耗费内存而不能拷屏
代码如下,按下button1后,edit1开始显示计时,一秒钟跳一次。
隔了一段时间后(或者一天多或者半个小时),dialog就不能拷屏,alt+printScreen时出现“内存不足,无法获取位图,请关闭一个或多个程序,或增加内存”的对话框。
查CSDN,02年有位兄弟也遇到相似情况,最后不了了之。
我现在的大程序也出现了消耗内存的问题,基本定位到了这段代码上,因为只要屏蔽这段代码,就不会出现不能拷屏的现象,而只要用这段代码,就会出现,或者准确的说是SetDlgItemText(),请高手指教:)
void CEditTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
SetTimer(1,1000,NULL);
m_iTime=0;
m_strTime= " ";

}

void CEditTestDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
int hour=0;
int minute=0;
int second=0;
char temp[100];

m_iTime++;//累加
hour=m_iTime/3600;
minute=(m_iTime-hour*3600)/60;
second=m_iTime-minute*60-hour*3600;

//显示时长
memset(temp, 0, 20);
sprintf(temp, "%2d:%2d:%2d ", hour, minute, second);//格式化数据


SetDlgItemText(IDC_EDIT1, _T(temp));
break;
}
CDialog::OnTimer(nIDEvent);

}

[解决办法]
把间隔调快了 10 倍, 试了一下, 按说 30 分钟, 现对应 3 分钟, 9 分钟过去了, 无事 .
[解决办法]
_T(temp)是什么意思?_T后接的应该是常量字符串.
如果是UNICODE版本,自动在前面加一个‘L’表示用WIDECHAR作初始化,后接字符指针没试过会有什么影响,搞不好会每次都在内存中生成一个新的unicode字符串(只有当程序退出时才会释放)

读书人网 >VC/MFC

热点推荐