在线等高手回答C++里面有关时间控制的问题

youxishaonian 2009-03-13 09:12:03
最近要开始一个实验电梯算法的论文设计,由于小弟学习基础不扎实,所以目前存在好多问题而不能开始动手

现在这里请问各位一个小小的算法:

设计一个界面,里面只有一个编辑框和两按钮

按钮一功能:开始功能,点击后编辑框数值每3秒递增1(编辑框初赋值为0),且显示出来;

按钮二功能:停止功能.


另:能不能用空循环来制造时,如下列函数:

void delay(int loops)
{
if(loops==0)

return;

for (int i=0;i<loops;i++)
}

即这样loops的数值为多少时,循环多少次才相当于1秒?
...全文
140 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ch1oE 2009-03-13
  • 打赏
  • 举报
回复
电梯算法。。
这个貌似是硕士论文的题目吧?
youxishaonian 2009-03-13
  • 打赏
  • 举报
回复
现在打算用VC.net做程序啦
youxishaonian 2009-03-13
  • 打赏
  • 举报
回复
以前是学C++的,现在打算用C++.net做,还在看书研究中呢
diannaomingong 2009-03-13
  • 打赏
  • 举报
回复
更正下,m_text是个复杂对象,一般要用getText或者getLabel这样的函数取值,再用setXX赋值
一般应该是

void frame::OnTimer(event)
{
int i=str2int(m_text->getText)+1;
m_text->setText(int2str(i));
}

diannaomingong 2009-03-13
  • 打赏
  • 举报
回复
标准C++不含界面,不含多线程,所以你要用某种库。主流的界面库一般都有定时器和界面绘制。

while(1) ... 这样的实现是性能和交互很不好的,应该用定时器,或者自己写个线程控制时间。

基本实现思路可以是这样

1.绘制个界面frame,编辑框m_text,按钮button1。
2.frame上弄个定时器m_timer。

void frame::OnClick_Button1(event)
{
if (!m_timer.isRunning)
{
m_timer.start(3000);
}
}

void frame::OnClick_Button2(event)
{
if (m_timer.isRunning)
{
m_timer.stop();
}
}

timer绑定一个函数OnTimer
EVT_TIMER(TIMER_ID,frame::OnTimer)

void frame::OnTimer(event)
{
int i=str2int(m_text)+1;
m_text=int2str(i);
}
youxishaonian 2009-03-13
  • 打赏
  • 举报
回复
郁闷死咯,电脑搬到学校实验室来,这里的局域网不是一般的卡,早上发了个贴,现在才能再次打开 - -

要不是阻塞的话,得咋做勒?
supkychen 2009-03-13
  • 打赏
  • 举报
回复
恩?那不阻塞该怎么做呢?
Dinelgua 2009-03-13
  • 打赏
  • 举报
回复
楼上大侠 给点建议吧
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Dinelgua 的回复:]
c 语言自己实现定时器怎么实现呢?

大家看看下面实现可以么,

bool bOneSecond = false;
Time timeBegin = timeGetTime();
Time timeNow;
while(1)
{
sleep(1);
timeNow = timeGetTime();
if(1000(毫秒) <= (timeNow-timeBegin))
{
//到达一秒钟了,此处回调需要定时调用的函数,或发送事件通知
report it is 1s now;
timeBegin = timeNow;
}
}
[/Quote]

都是些类似阻塞的做法。。
Dinelgua 2009-03-13
  • 打赏
  • 举报
回复
c 语言自己实现定时器怎么实现呢?

大家看看下面实现可以么,

bool bOneSecond = false;
Time timeBegin = timeGetTime();
Time timeNow;
while(1)
{
sleep(1);
timeNow = timeGetTime();
if(1000(毫秒) <= (timeNow-timeBegin))
{
//到达一秒钟了,此处回调需要定时调用的函数,或发送事件通知
report it is 1s now;
timeBegin = timeNow;
}
}
  • 打赏
  • 举报
回复
用什么库做界面啊?连个计时函数都没有?反正最好别sleep,主界面线程坚持不sleep,不阻塞的原则。
linux下有alarm可以计时,QT有Qtimer类,
MFC里不是也有OnTimer跟Settimer吗?
youxishaonian 2009-03-13
  • 打赏
  • 举报
回复
还有前面的问题呢..能不能解答一下?
tianma2005123 2009-03-13
  • 打赏
  • 举报
回复
用循环是肯定算不出时间来的,使用timeGetTime()函数,精确到毫秒;使用QueryPerformanceFrequency()精确到微秒。
xxweilw 2009-03-13
  • 打赏
  • 举报
回复
循环多少次才相当于1秒是算不出来的,由于编译器的不同,计算机硬件的不同,产生的结果也相差很多。
三秒就用Sleep(3000)吧
topwork 2009-03-13
  • 打赏
  • 举报
回复
你要等一秒钟很简单,Sleep(1000),
此外WaitForSingleObject和WaitForMultipleObjects也可以等待。
jwpl190 2009-03-13
  • 打赏
  • 举报
回复
不可行。loops的数值为多少时,看CPU的时钟周期了。你能保证所有的机器都一样吗。
使用定时器吧。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧