分类:
2008-10-14 14:54:48
Sleep
函数状态: 正式函数 ,建设者:deane ,最新更新时间: 2002-11-3 9:48:03
函数功能描述:这个函数将挂起当前线程的执行,等侯指定的时间间隔。
函数原形:
VOID Sleep( DWORD dwMilliseconds );
参数:
dwMilliseconds
[输入] 指定一个时间间隔,单位毫秒, 用于挂起线程的时间。
0值引起线程放弃余下的时间给其他同等优先级别准备运行的线程,如果没有相等优先级的线程运行, 函数立即返回线程继续运行。
值 INFINITE 无限制挂起线程。
返回值:
没有返回值。
备注:
这个函数引起一个线程放弃剩余时间并且停止运行直到指定的时间间隔后线程准备运行。 特殊点,如果你指定零秒,线程将放弃剩余的时间段继续等待。 要注意准备的线程并不保证立即执行。因此,线程可能不运行直到到达指定的时间间隔,更多的参考信息,察看计划优先级。
使用函数时必须要小心直接或间接的创建窗体。 如果线程创建任意窗体,则必须处理消息。消息广播发送给所有系统中的窗体。如果有一个线程调用Sleep无限制等待, 系统将死锁。 DDE 和 COM CoInitialize 是间接创建窗体的两个例子。 因此, 有线程创建窗体,使用 MsgWaitForMultipleObjects 函数或者MsgWaitForMultipleObjectsEx 函数,这两个函数更适合。
需求:
Windows NT/2000/XP: 包括Windows NT 3.1 和以后版本。
Windows 95/98/Me: 包括Windows 95 和以后版本。
头文件: 定义在 Winbase.h; 包含于 Windows.h.
连接库: 使用 Kernel32.lib.
事例代码:
#include
#include
#define THREADCOUNT 4
DWORD dwTlsIndex;
VOID ErrorExit(LPTSTR);
VOID CommonFunc(VOID)
{
LPVOID lpvData;
// Retrieve a data pointer for the current thread.
lpvData = TlsGetValue(dwTlsIndex);
if ((lpvData == 0) && (GetLastError() != 0))
ErrorExit("TlsGetValue error");
// Use the data stored for the current thread.
printf("common: thread %d: lpvData=%lx\n",
GetCurrentThreadId(), lpvData);
Sleep(5000);
}
DWORD WINAPI ThreadFunc(VOID)
{
LPVOID lpvData;
// Initialize the TLS index for this thread.
lpvData = (LPVOID) LocalAlloc(LPTR, 256);
if (! TlsSetValue(dwTlsIndex, lpvData))
ErrorExit("TlsSetValue error");
printf("thread %d: lpvData=%lx\n", GetCurrentThreadId(), lpvData);
CommonFunc();
// Release the dynamic memory before the thread returns.
lpvData = TlsGetValue(dwTlsIndex);
if (lpvData != 0)
LocalFree((HLOCAL) lpvData);
return 0;
}
DWORD main(VOID)
{
DWORD IDThread;
HANDLE hThread[THREADCOUNT];
int i;
// Allocate a TLS index.
if ((dwTlsIndex = TlsAlloc()) == -1)
ErrorExit("TlsAlloc failed");
// Create multiple threads.
for (i = 0; i < THREADCOUNT; i++)
{
hThread[i] = CreateThread(NULL, // no security attributes
0, // use default stack size
(LPTHREAD_START_ROUTINE) ThreadFunc, // thread function
NULL, // no thread function argument
0, // use default creation flags
&IDThread); // returns thread identifier
// Check the return value for success.
if (hThread[i] == NULL)
ErrorExit("CreateThread error\n");
}
for (i = 0; i < THREADCOUNT; i++)
WaitForSingleObject(hThread[i], INFINITE);
return 0;
}
VOID ErrorExit (LPTSTR lpszMessage)
{
fprintf(stderr, "%s\n", lpszMessage);
ExitProcess(0);
}
本函数最新话题