SHCreateThreadWithHandle 함수(shlwapi.h)
새 스레드를 만들고 해당 핸들을 검색합니다.
구문
BOOL SHCreateThreadWithHandle(
[in] LPTHREAD_START_ROUTINE pfnThreadProc,
[in, optional] void *pData,
[in] SHCT_FLAGS flags,
[in, optional] LPTHREAD_START_ROUTINE pfnCallback,
[out, optional] HANDLE *pHandle
);
매개 변수
[in] pfnThreadProc
형식: LPTHREAD_START_ROUTINE
LPTHREAD_START_ROUTINE 형식의 애플리케이션 정의 함수에 대한 포인터입니다. 새 스레드가 성공적으로 만들어진 경우 이 애플리케이션 정의 함수는 해당 스레드의 컨텍스트에서 호출됩니다. SHCreateThreadWithHandle 은 pfnThreadProc 이 가리키는 함수가 완료된 후 호출자에게 반환되기를 기다리지 않습니다. pfnThreadProc에서 지정한 함수의 반환 값은 스레드의 종료 코드입니다.
[in, optional] pData
형식: void*
초기화 데이터를 포함하는 선택적 애플리케이션 정의 데이터 구조에 대한 포인터입니다. pfnThreadProc에서 가리키는 함수 및 필요에 따라 pfnCallback이 가리키는 함수에 전달됩니다.
[in] flags
형식: SHCT_FLAGS
함수의 동작을 제어하는 플래그입니다. 하나 이상의 CTF 상수입니다.
[in, optional] pfnCallback
형식: LPTHREAD_START_ROUTINE
LPTHREAD_START_ROUTINE 형식의 선택적 애플리케이션 정의 함수에 대한 포인터입니다. 이 함수는 pfnThreadProc 에서 가리키는 함수가 호출되기 전에 생성된 스레드의 컨텍스트에서 호출됩니다. 또한 pData 를 인수로 받습니다. SHCreateThreadWithHandle 은 pfnCallback 이 가리키는 함수가 완료되기를 기다린 후 호출자에게 돌아갑니다. pfnCallback에서 지정한 함수의 반환 값은 무시됩니다.
[out, optional] pHandle
형식: HANDLE*
생성된 스레드의 HANDLE 에 대한 포인터입니다. 더 이상 필요하지 않은 경우 CloseHandle 함수를 호출하여 이 핸들을 닫아야 합니다. 이 값은 NULL일 수 있습니다.
반환 값
형식: BOOL
스레드 가 성공적으로 만들어지면 TRUE이고, 그렇지 않으면 FALSE입니다.
설명
Windows 7 이전에는 이 함수에 연결된 헤더 또는 라이브러리 파일이 없었습니다. 이전 운영 체제에서 이 함수를 사용하려면 DLL 이름(Shlwapi.dll)을 사용하여 LoadLibrary 를 호출하여 모듈 핸들을 가져옵니다. 그런 다음, 해당 모듈 핸들과 함수 서수 615를 사용하여 GetProcAddress 를 호출하여 이 함수의 주소를 가져옵니다.
pfnThreadProc 및 pfnCallback에서 가리키는 함수는 다음 형식을 사용해야 합니다.
DWORD WINAPI ThreadProc(LPVOID pData)
{
...
}
함수 이름은 임의입니다. pData 매개 변수는 초기화 정보가 있는 애플리케이션 정의 데이터 구조를 가리킵니다.
예제
다음 코드 예제에서는 서수로 SHCreateThreadWithHandle 을 호출하기 위한 함수 포인터 프로토타입 typedef를 제공하고 이러한 호출을 수행하는 방법을 보여줍니다.
// Define SHCREATETHREADWITHHANDLE as a function pointer to SHCreateThreadWithHandle.
typedef BOOL (STDMETHODCALLTYPE *SHCREATETHREADWITHHANDLE)(LPTHREAD_START_ROUTINE,
void *,
DWORD,
LPTHREAD_START_ROUTINE,
HANDLE *);
// CallSHCreateThreadWithHandle is an example function that:
// 1. Accepts parameters for the SHCreateThreadWithHandle function.
// 2. Loads Shlwapi.dll, which implements SHCreateThreadWithHandle.
// 3. Obtains the address of SHCreateThreadWithHandle in the loaded library.
// 4. Calls SHCreateThreadWithHandle through a SHCREATETHREADWITHHANDLE function pointer.
BOOL CallSHCreateThreadWithHandle(LPTHREAD_START_ROUTINE pfnThreadProc,
void *pData,
DWORD dwFlags,
LPTHREAD_START_ROUTINE pfnCallback,
HANDLE *pHandle)
{
// Build a string that contains the local path to Shlwapi.dll.
WCHAR szPath[MAX_PATH];
GetSystemDirectory(szPath, ARRAYSIZE(szPath));
PathAppend(szPath, L"shlwapi.dll");
// Attempt to load Shlwapi.dll.
HMODULE hModule = LoadLibrary(szPath);
HRESULT hr = hModule ? S_OK : HRESULT_FROM_WIN32(GetLastError());
if (SUCCEEDED(hr))
{
// Shlwapi.dll is loaded.
// Before Windows 7, SHCreateThreadWithHandle must be accessed through
// its ordinal. The following commented lines are used for this.
// Get the address of SHCreateThreadWithHandle through its ordinal value of 615.
// SHCREATETHREADWITHHANDLE pfn =
// (SHCREATETHREADWITHHANDLE)GetProcAddress(hModule, MAKEINTRESOURCEA(615));
//
// hr = pfn ? S_OK : HRESULT_FROM_WIN32(GetLastError());
//
// if (SUCCEEDED(hr))
// {
// // Call SHCreateThreadWithHandle through SHCREATETHREADWITHHANDLE.
// hr = pfn(pfnThreadProc, pData, dwFlags, pfnCallback, pHandle)
// ? S_OK : HRESULT_FROM_WIN32(GetLastError());
// }
// FreeLibrary(hModule);
hr = SHCreateThreadWithHandle(pfnThreadProc, pData, dwFlags, pfnCallback, pHandle)
? S_OK : HRESULT_FROM_WIN32(GetLastError());
}
return SUCCEEDED(hr);
}
요구 사항
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | shlwapi.h |
라이브러리 | Shlwapi.lib |
DLL | Shlwapi.dll(버전 6.0 이상) |