做个for()1-100000不过跟sleep()没区别
做个线程在用sleep()会很不错的
做个线程在用sleep()会很不错的
解决方案 »
- Unicode下CString类型的数据如何赋值到unsigned char*中,度娘已不能解决了...
- 谁能实现这个功能?给分300!
- 请高手帮忙
- 虽然直接用Accept()函数会阻塞,但所谓的异步的event模型,用WSAWaitForMultipileEvents()不也是阻塞吗?它比直接使用Accept()的优势在哪
- 请问大家:是编译器的问题吗?
- 想了解CIH代码吗
- 如何将RGB565图像数据在窗口类直接显示出来
- 请教关于难问题
- 如何返回 ListCtrl 的被选择项的图标的编号?
- Win32 (SDK) 如何实现改变Tab Control 的背景色,获取Tab Control的标签高度?
- 我用ODBC做了一个程序,为什么我删除掉末尾的一个记录后,在去看前面的记录,就有警告?
- 怎么才能实现上下两层toobar
void sqrt()
{
if(!(--i % 100))
sleep(10);
else
if(i>=2)
sqrt();
}
//ok?
---- 这 段 程 序 的 主 要 功 能 是: 设 置 两 个 时 钟 定 时 器, 一 个 间 隔 是1 毫 秒, 一 个 间 隔 是2 秒, 每 执 行 一 次, 输 出 当 前 系 统 时 钟 值 到 文 件“cure.out”, 以 比 较 此 定 时 器 的 精 确 度。( 此 程 序 在 中 文windows95 及Microsoft VC5.0 编 译 通 过。 只 节 取 与 定 时 器 有 关 的 部 分 程 序。) #include < stdio.h >
//包含所用系统函数的头文件,
如果编译有问题,可调整此语句的位置
#include < mmsystem.h >//定义1毫秒和2秒时钟间隔,以毫秒为单位
#define ONE_MILLI_SECOND1
#define TWO_SECOND 2000
//定义时钟分辨率,以毫秒为单位
#define TIMER_ACCURACY1UINT wTimerRes_1ms,wTimerRes_2s; //定义时间间隔
UINT wAccuracy;//定义分辨率
UINT TimerID_1ms,TimerID_2s;//定义定时器句柄CCureApp::CCureApp()
: fout("cure.out", ios::out)//打开输出文件“cure.out”
{
// TODO: add construction code here,
// Place all significant
initialization in InitInstance
//给时间间隔变量赋值
wTimerRes_1ms = ONE_MILLI_SECOND ;
wTimerRes_2s = TWO_SECOND;
TIMECAPS tc;
//通过函数timeGetDevCaps取出系统
的分辨率取值范围(对intel系统,
1~16毫秒),//如果无错则继续
if(timeGetDevCaps(&tc, sizeof(TIMECAPS))
== TIMERR_NOERROR)
{
//分辨率的值不能超出系统的取值范围
wAccuracy = min(max(tc.wPeriodMin,
TIMER_ACCURACY),tc.wPeriodMax);
//调用timeBeginPeriod函数设置定时器
的分辨率,类似于for循环的步长
timeBeginPeriod(wAccuracy);
//设置定时器
InitializeTimer();
}
}CCureApp::~CCureApp()
{
//结束时钟
fout < < "结束时钟" < < endl;
//删除两个定时器
timeKillEvent(TimerID_1ms);
timeKillEvent(TimerID_2s);
//删除设置的分辨率
timeEndPeriod(wAccuracy);
}
注:使用完的定时器及分辨率一定
要删除,否则系统会越来越慢。void CCureApp::InitializeTimer()
{
StartOneMilliSecondTimer();
StartTwoSecondTimer();
}//一毫秒定时器的回调函数,
类似于中断处理程序
voidPASCAL//一定要声明为全局PASCAL函数,
否则编译会有问题
OneMilliSecondProc(UINT wTimerID, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
{
static int ms = 0;//定义计数器
CCureApp *app = (CCureApp *)dwUser;
//取得系统时间以毫秒为单位
DWORD osBinaryTime = GetTickCount();
//输出计数器值和当前系统时间到文件
app- >fout < < ++ms < < ": 1ms : "
< < osBinaryTime < < endl;
}//加装1毫秒定时器
void CCureApp::StartOneMilliSecondTimer()
{
if((TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy,
(LPTIMECALLBACK) OneMilliSecondProc,//回调函数
(DWORD)this,//用户自传送到回调函数的数据
/*周期调用,只使用一次用TIME_ONESHOT*/
TIME_PERIODIC)) == 0)
{
AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK);
}
else//不等于0表明加装成功,
返回此定时器的句柄
fout < < "16ms计时:" < < endl;
}以下为2秒定时器的回调函
数和加装函数,与1毫秒的类似;
void PASCAL
TwoSecondProc(UINT wTimerID, UINT msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
{
static int s = 0;
CCureApp *app = (CCureApp *)dwUser;
DWORD osBinaryTime = GetTickCount();
app- >fout < < "***********************
***********************" < < endl;
app- >fout < < ++s < < ": 2s : "
< < osBinaryTime < < endl;
}void CCureApp::StartTwoSecondTimer()
{
if((TimerID_2s = timeSetEvent(wTimerRes_2s, wAccuracy,
(LPTIMECALLBACK) TwoSecondProc,
(DWORD)this,
TIME_PERIODIC)) == 0)
{
AfxMessageBox("不能计时", MB_OK | MB_ICONASTERISK);
}
else
fout < < "2s计时:" < < endl;
}
在对话框程序中,用Sleep函数,会产生类似停止相应的现象,比如此时我要
刷新一下视图区的图像。所以我会和sleep过不去
_int64 iBeg,iEnd,iSpan=你要的时间间隔;
struct __timeb64 timeptr;
::_ftime64(&timeptr);
iBeg = (timeptr.time+timeptr.timezone*60*1000+timeptr.millitm;
iEnd = iBeg;
while(iEnd-iBeg<iSpan)
{
::_ftime64(&timeptr);
iEnd = (timeptr.time+timeptr.timezone*60*1000+timeptr.millitm;
}在vc6.0我只知道又一个类型time_t,只能精确到秒级,实现方法一样,如有谁知道什么函数能精确到毫秒级请告诉我。
你所提供的方法大概会和Sleep函数有怎样的不同呢?
来控制递归算法的速度,或者有没可以实现的方案?利用Sleep()的方法除外。
int i = 1000;
void sqort()
{
i --;
if(i<2)goto end;
sqort();
end:;
}因为递归调用的次数自己是函数调用时自己决定的,我只需调用一次就可以了
但在递归函数内部自身的多次调用时无法控制的。