编一个小程序,用了三个Edit Box,num、spa.zenith和flag随程序的运行是不断变化的,但现在三个Edit Box中只显示第一次运行结果,并没有实时显示程序的结果,如何修改程序,请赐教。程序段如下: do
{
t=time(0);
local=localtime(&t); ShellExecute(NULL,"open","d:\GZJD.exe",NULL,NULL,SW_SHOWNORMAL); if(num-spa.zenith>-0.5 && num-spa.zenith<0.5)
flag="on";
else
flag="off"; Sleep(1000); /**************************/ UpdateData(TRUE);
m_Bianmaqi=num;
m_Jisuanzhi=spa.zenith;
m_Dianjizhuangtai=flag;
UpdateData(FALSE); /**************************/
} while(t>=sunrisetime && t<=sunsettime);
{
t=time(0);
local=localtime(&t); ShellExecute(NULL,"open","d:\GZJD.exe",NULL,NULL,SW_SHOWNORMAL); if(num-spa.zenith>-0.5 && num-spa.zenith<0.5)
flag="on";
else
flag="off"; Sleep(1000); /**************************/ UpdateData(TRUE);
m_Bianmaqi=num;
m_Jisuanzhi=spa.zenith;
m_Dianjizhuangtai=flag;
UpdateData(FALSE); /**************************/
} while(t>=sunrisetime && t<=sunsettime);
解决方案 »
- 封装成OCX
- 调用CMyWindow.ShowWindow(SW_SHOW)时,CMyWindow上的子窗体会收到什么消息?
- vc2003.net中如何配置Unicode等方式的编译环境?
- 基于对话框程序中主对话框中内嵌子对话位图绘制问题
- 急!!!关于VC网络编程的调试
- 新手提问:如何将位图中某种颜色指定成另一种颜色
- 急啊!!!不同标签页的内容如何显示???
- 请能给我讲解一下堆栈与堆!!!
- 菜问题,我就想马上用ATL做一个Simple Object,让它能弹出一个"TMD COM",行吗?
- 蓝牙地址随机数?
- VS2005中Cstring 和const char*的问题
- vc中如何保证同样的exe程序只有一个运行啊
程序运行过程中,确实出现muzizongheng兄所说的卡死现象。我现在只用单线程操作,想让程序暂停1S,,参照论坛上的帖子,抛弃sleep()函数后,改用:
/****************延时操作****************/
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
dwEnd = GetTickCount();
} while((dwEnd - dwStart) <=1000); /****************延时操作****************/现在程序还是出现卡死现象,这是咋回事?
一样啊, 你的界面线程因为这个while循环空转啊, cpu会高, 也会卡的.
/****************延时操作****************/
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do{
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
dwEnd = GetTickCount();
} while((dwEnd - dwStart) <=1000); /****************延时操作****************/用以上的代码执行延时操作后,不再出现卡死现象。但并未能实现实时显示程序计算数据(程序设置1s更新数据),滞后情况严重。请问如何解决。先行谢过。
muzizongheng兄,您好!首先对您的热心帮助表示感谢!我按您说的对程序进行了改动,但现在实时显示的状况还是有些糟糕,现在我把这段代码贴上,请再帮我诊断一下。[code=C/C++]if(t>=sunrisetime)
do
{
t=time(0);
local=localtime(&t);
spa.year = local->tm_year+1900;
spa.month = local->tm_mon;
spa.day = local->tm_mday;
spa.hour = local->tm_hour;
spa.minute = local->tm_min;
spa.second = local->tm_sec;
spa.timezone = 8;
spa.delta_t = 67;
spa.longitude = 113.2;
spa.latitude = 23.1;
spa.elevation = 41;
spa.pressure = 1008.4;
spa.temperature = 22.4;
spa.slope = 30;
spa.azm_rotation = -10;
spa.atmos_refract = 0.5667;
spa.function = SPA_ALL;
pt.tm_year =spa.year-1900;
pt.tm_mon = spa.month;
pt.tm_mday = spa.day;
pt.tm_isdst =0; result = spa_calculate(&spa);
if (result == 0)
{
min = 60.0*(spa.sunrise - (int)(spa.sunrise));
sec = 60.0*(min - (int)min);
pt.tm_hour = (int)(spa.sunrise);
pt.tm_min = (int)min;
pt.tm_sec = (int)sec;
sunrisetime=mktime(&pt);
min = 60.0*(spa.sunset - (int)(spa.sunset));
sec = 60.0*(min - (int)min);
pt.tm_hour = (int)(spa.sunset);
pt.tm_min = (int)min;
pt.tm_sec = (int)sec;
sunsettime=mktime(&pt);
} ShellExecute(NULL,"open","d:\GZJD.exe",NULL,NULL,SW_SHOWNORMAL); num=GAM60Value(); if(num-spa.zenith>-0.5 && num-spa.zenith<0.5)
flag="on";
else
flag="off";
/****************延时操作****************/
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do{
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
dwEnd = GetTickCount();
} while((dwEnd - dwStart) <=1500);
/****************延时操作****************/
UpdateData(TRUE); m_Bianmaqi=num;
m_Jisuanzhi=spa.zenith;
m_Dianjizhuangtai=flag; UpdateData(FALSE);
UpdateWindow(); } while(t>=sunrisetime && t<=sunsettime);code]
[email protected]