函数原形:
VOID Sleep(DWORD dwMilliseconds );
参数:
dwMilliseconds
[输入]指定一个时间间隔,单位毫秒,用于挂起线程的时间。
0值引起线程放弃余下的时间给其他同等优先级别准备运行的线程,如果没有相等优先级的线程运行,函数立即返回线程继续运行。
值 INFINITE无限制挂起线程。
返回值:
没有返回值。
备注:
这个函数引起一个线程放弃剩余时间并且停止运行直到指定的时间间隔后线程准备运行。特殊点,如果你指定零秒,线程将放弃剩余的时间段继续等待,要注意准备的其他线程并不保证立即执行,因此,线程可能不运行直到到达指定的时间间隔,更多的参考信息,察看计划优先级。
使用函数时必须要小心直接或间接的创建窗体。如果线程创建任意窗体,则必须处理消息。消息广播发送给所有系统中的窗体。如果有一个线程调用Sleep无限制等待,系统将死锁。 DDE 和 COM CoInitialize 是间接创建窗体的两个例子。 因此, 有线程创建窗体,使用MsgWaitForMultipleObjects 函数或者MsgWaitForMultipleObjectsEx函数,这两个函数更适合。
需求:
Windows NT/2000/XP: 包括WindowsNT 3.1 和以后版本。
Windows 95/98/Me: 包括Windows 95和以后版本。
头文件: 定义在 Winbase.h; 包含于Windows.h.
连接库: 使用 Kernel32.lib.
示例代码:
#include<stdio.h>
#include<windows.h>
#define THREADCOUNT4
DWORDdwTlsIndex;
VOIDErrorExit(LPTSTR);
VOIDCommonFunc(VOID)
{
LPVOIDlpvData;
// Retrieve a data pointer for the currentthread.
lpvData =TlsGetValue(dwTlsIndex);
if ((lpvData == 0)&& (GetLastError() !=0))
ErrorExit("TlsGetValueerror");
// Use the data stored for the currentthread.
printf("common: thread %d:lpvData=%lxn",
GetCurrentThreadId(),lpvData);
Sleep(5000);
}
DWORD WINAPIThreadFunc(VOID)
{
LPVOIDlpvData;
// Initialize the TLS index for thisthread.
lpvData = (LPVOID)LocalAlloc(LPTR,256);
if (! TlsSetValue(dwTlsIndex,lpvData))
ErrorExit("TlsSetValueerror");
printf("thread %d:lpvData=%lxn", GetCurrentThreadId(),lpvData);
CommonFunc();
// Release the dynamic memory before the threadreturns.
lpvData =TlsGetValue(dwTlsIndex);
if (lpvData !=0)
LocalFree((HLOCAL)lpvData);
return0;
}
DWORDmain(VOID)
{
DWORDIDThread;
HANDLEhThread[THREADCOUNT];
inti;
// Allocate a TLSindex.
if ((dwTlsIndex = TlsAlloc())== -1)
ErrorExit("TlsAllocfailed");
// Create multiplethreads.
for (i = 0; i <THREADCOUNT;i++)
{
hThread[i] = CreateThread(NULL, // no securityattributes
0,// use default stacksize
(LPTHREAD_START_ROUTINE) ThreadFunc, // threadfunction
NULL,// no thread functionargument
![VC中Sleep函数 vc6 sleep](http://img.aihuau.com/images/01111101/01040924t01ada855005ca82919.jpg)
0,// use default creationflags
&IDThread);// returns threadidentifier
// Check the return value forsuccess.
if (hThread[i] ==NULL)
ErrorExit("CreateThreaderrorn");
}
for (i = 0; i <THREADCOUNT;i++)
WaitForSingleObject(hThread[i],INFINITE);
return0;
}
VOID ErrorExit (LPTSTRlpszMessage)
{
fprintf(stderr, "%sn",lpszMessage);
ExitProcess(0);
}