首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

定时用SetDlgItemText()更新edit导致耗费内存而不能拷屏解决办法

2012-01-22 
定时用SetDlgItemText()更新edit导致耗费内存而不能拷屏代码如下,按下button1后,edit1开始显示计时,一秒钟

定时用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字符串(只有当程序退出时才会释放)

热点排行