busy loop

/************************************************************************************* 使用过的两个线程等待技术: Sleep() busy loop 即不断调用GetExitCodeThread()直到其结果不再是STILL_ACTIVE。busy loop通常是可以依赖的,但是有个重大缺陷:浪费CPU时间! *************************************************************************************/ #include #include #include #include DWORD WINAPI ThreadFunc(LPVOID); int main(char argc, char* argv[]) { HANDLE hThrd; DWORD exitCode = 0; DWORD threadId; DWORD begin; DWORD elapsed; puts("Timing normal function call.../n"); begin = GetTickCount(); ThreadFunc(0); elapsed = GetTickCount() - begin; printf("function call took: %d.%.03d seconds/n/n", elapsed/1000, elapsed%1000); puts("timing thread + busy loop.../n"); begin = GetTickCount(); hThrd = CreateThread(NULL, 0, ThreadFunc, (LPVOID)1, 0, &threadId); // busy loop for(;;) { GetExitCodeThread(hThrd, &exitCode); if(exitCode != STILL_ACTIVE) { break; } } elapsed = GetTickCount() - begin; printf("function call took: %d.%.03d seconds/n/n", elapsed/1000, elapsed%1000); CloseHandle(hThrd); return EXIT_SUCCESS; } DWORD WINAPI ThreadFunc(LPVOID n) { int i; int inside = 0; double val; srand((unsigned)time(NULL)); for(i=0; i<100000000; i++) { double x = (double)(rand())/RAND_MAX; double y = (double)(rand())/RAND_MAX; if((x*x + y*y) <= 1.0) { inside++; } } val = (double)inside/i; printf("pi = %.4g/n, val*4"); return 0; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值