Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1706899
  • 博文数量: 263
  • 博客积分: 1218
  • 博客等级: 少尉
  • 技术积分: 2862
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 02:33
文章分类

全部博文(263)

文章存档

2020年(12)

2019年(2)

2018年(10)

2016年(1)

2015年(20)

2014年(115)

2013年(46)

2012年(37)

2011年(20)

分类: Windows平台

2014-03-11 16:36:54



的回答
XSLEEP.CPP:
//Download by 
#include 
  
// This structure is used internally by the XSleep function 
struct XSleep_Structure
{
    int duration;
    HANDLE eventHandle;
};
  
  
//////////////////////////////////////////////////////////////////////
// Function  : XSleepThread()
// Purpose   : The thread which will sleep for the given duration
// Returns   : DWORD WINAPI
// Parameters:       
//  1. pWaitTime -
//////////////////////////////////////////////////////////////////////
DWORD WINAPI XSleepThread(LPVOID pWaitTime)
{
    XSleep_Structure *sleep = (XSleep_Structure *)pWaitTime;
  
    Sleep(sleep->duration);
    SetEvent(sleep->eventHandle);
  
    return 0;
}
  
//////////////////////////////////////////////////////////////////////
// Function  : XSleep()
// Purpose   : To make the application sleep for the specified time
//             duration.
//             Duration the entire time duration XSleep sleeps, it
//             keeps processing the message pump, to ensure that all
//             messages are posted and that the calling thread does
//             not appear to block all threads!
// Returns   : none
// Parameters:       
//  1. nWaitInMSecs - Duration to sleep specified in miliseconds.
//////////////////////////////////////////////////////////////////////
void XSleep(int nWaitInMSecs)
{
    XSleep_Structure sleep;
      
    sleep.duration      = nWaitInMSecs;
    sleep.eventHandle   = CreateEvent(NULL, TRUE, FALSE, NULL);
  
    DWORD threadId;
    CreateThread(NULL, 0, &XSleepThread, &sleep, 0, &threadId);
  
    MSG msg;
      
    while(::WaitForSingleObject(sleep.eventHandle, 0) == WAIT_TIMEOUT)
    {
        //get and dispatch messages
        if(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
        }
    }
  
    CloseHandle(sleep.eventHandle);
}

// xsleep.h
//Download by 
#ifndef _XSLEEP_H_
#define _XSLEEP_H_
  
void XSleep(int nWaitInMSecs);
  
#endif // _XSLEEP_H_
阅读(3868) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~