windows下的两个等待函数

windows下的两个等待技术

第一种: Win32  Sleep()函数

     这个函数要求操作系统中止线程动作,直到读过某个指定的时间之后才恢复。能在某个线程结束时(而不是某段时间结束时)被调用。

第二种:busy  loop(busy waits)

     不断调用GetExitCodeThread(),直到其结果不再是STILL_ACTIVE.

缺点:浪费CPU时间。

绝对不要在Win32中使用busy loop

//busywait.c

/*Domonstrate the effect on performance of using a busy loop.

First call the worker routine with just a function call to get a baseline performance reading

then create a second thread and a busy loop.

*/

#define WIN32_LEAN_AND_MEAN

#include <stdio.h>

#include<stdlib.h>

#include<windows.h>

#include<time.h>

#include "MtVerify.h"

DWORD WINAPI ThreadFunc(LPVOID);

int main()

{

HANDLE hThrd;

DWORD exitCode = 0;

DWORD threadId;

DWORD begin;

DWORD elapsed;

puts("TImiing normal function call.....");

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....");

begin = GetTickCount();

MTVERIFY(hThrd = CreateThread(NULL, 0, ThreadFunc, (LPVOID)1, 0, &threadId));

//这个宏内部其实是记录并解释了Win32 GetLastError()的结果。

/*This busy loop chews up lots of CPU time*/

for (;;)

{

GetExitCodeThread(hThrd, &exitCode);

if (exitCode != STILL_ACTIVE)

break;

}

elapsed = GetTickCount() - begin;

printf("Thread+busy loop took: %d.%.03d seconds\n", elapsed / 1000, elapsed % 1000);

MTVERIFY(CloseHandle(hThrd));

return EXIT_SUCCESS;

}

/*Cute little busy work routine that computes the value

of PI using probability.Highly dependent on having a good random number generator (rand is iffy)

*/

DWORD WINAPI ThreadFunc(LPVOID n)

{

int i;

int inside = 0;

double val;

UNREFERENCED_PARAMETER(n);//告诉编译器,已经使用了该变量,不必检测警告!

/*Seed the random-number generator.*/

srand((unsigned)time(NULL));

for (i = 0; i < 1000000; 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;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 02:02:06

windows下的两个等待函数的相关文章

windows下配置两个或多个Tomcat启动的方法

确保window的环境变量中找不到CATALINA_HOME和CATALINA_BASE 修改server.xml,用解压版的tomcat,不要用安装版的. 1.修改http访问端口 conf下的server.xml文件的服务访问端口,默认是8080可以改成其它的,如7000 2.修改shutdown端口 默认8005 3.修改jvm启动默认端口,默认端口为8009 <br><Connector port="8009" protocol="AJP/1.3&q

Windows下编程2----- C语言常用函数举例

几个小函数 1.????//MessageBoxA(0,"网络故障,重新登录","qq error",3); //弹出对话框 2.????//ShellExecuteA(0,"open","notepad",0,0,6);????//执行指令 notepad可以指定网址 ? 3.????//malloc(100000);//吃内存,铲食 ????//Sleep(100); 4.获取当前时间并打印 方法一: ????SYSTEM

在windows下计算两个时间的时间差(精确到毫秒)

首先,认识一下clock()和GetTickCount(): 一.clock() clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简单而言,就是该程序从启动到函数调用占用CPU的时间.这个函数返回从"开启这个程序进程"到"程序中调用clock()函数"时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-cloc

关于windows下的c++的rand函数详解

rand不是真正的随机函数,是伪随机函数 srand设置随机函数种子 srand设置一个参数后,每调用一次rand产生一个随机数 srand(1000001) rand  –  21589 rand  –  29335 rand  –  14469 srand参数相同,多次调用rand依次返回的值相同, srand (1000001) rand  - 21589 srand (1000001) rand  - 21589 srand (1000001) rand  - 21589 srand入参

Windows下的两个缺陷

记事本缺陷: 标题:新建记事本中仅输入“联通”,保存关闭后再打开,显示为乱码 详细描述: 环境说明:操作系统ALL 重现步骤: 1.新建一个记事本,在其中仅输入“联通”两个字 2.再将该记事本关闭保存 3.再次打开该记事本 缺陷说明:联通两个字显示为乱码 扫雷也是有Bug的 标题:使用快捷键最小化运行的扫雷再用鼠标还原,计时停止了. 详细描述: 环境:WIN XP 重现步骤: 1.打开并运行扫雷(在运行中输入winmine) 2.使用快捷键Win+D最小化,再用鼠标还原 缺陷说明:扫雷的时间停止

Windows 下关于转码的函数

1 std::string& MsgFieldList::GBToUTF8(std::string& des,const char* str) 2 { 3 WCHAR *strSrc; 4 TCHAR *szRes; 5 6 //获得临时变量的大小 7 int i = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); 8 strSrc = new WCHAR[i+1]; 9 MultiByteToWideChar(CP_ACP, 0, st

windows下字符编码的转化函数

//GB2312到UTF-8的转换static int GB2312ToUtf8(const char* gb2312, char* utf8){int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);wchar_t* wstr = new wchar_t[len+1];memset(wstr, 0, len+1);MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);len

windows下的getopt/getoptlong函数

windows下的getopt/getoptlong函数 getopt/getopt_long函数是GNU C中的函数,在linux编程中很常用到.这里就不介绍了. windows下没有找到类似的函数,自己写一个又浪费时间,于是乎从glibc中找出来. 这里放出两个版本的下载地址 http://files.cnblogs.com/files/oloroso/getopt--from-glibc-2.15.tar.gz http://files.cnblogs.com/files/oloroso/

【转】在Windows下搭建React Native Android开发环境

http://my.oschina.net/jackzlz/blog/508210 安装JDK 从Java官网下载JDK并安装.请注意选择x86还是x64版本. 推荐将JDK的bin目录加入系统PATH环境变量. 安装Android SDK 可以单独安装Android SDK,也可以通过Eclipse ADT或者Android Studio一并安装.推荐使用Android Studio,以下说明会默认以Android Studio的方式说明.请注意选择x86还是x64版本. 为了加速下载,推荐从