虽然传参不是由分配者去释放的,但是这样做既能保证参数传递的安全性,又能不影响创建者线程的正常工作,也不需要使用事件或者锁
typedef struct _MY_STRUCT
{
ULONG ul1;
ULONG ul2;
ULONG ul3;
} MY_STRUCT, *PMY_STRUCT, *LPMY_STRUCT;
DWORD
WINAPI
ThreadProc(
_In_ LPVOID lpParameter
)
{
LPMY_STRUCT lpMyStruct = NULL;
__try
{
if (!lpParameter)
{
printf("[ThreadProc] : input parameter error \n");
__leave;
}
lpMyStruct = (LPMY_STRUCT)lpParameter;
}
__finally
{
if (lpParameter)
free(lpParameter);
}
return 1;
}
BOOL
CreateThreadExample()
{
BOOL bRet = FALSE;
HANDLE hThread = NULL;
LPMY_STRUCT lpMyStruct = NULL;
BOOL bNeedDelResource = TRUE;
__try
{
lpMyStruct = (LPMY_STRUCT)malloc(sizeof(MY_STRUCT));
if (!lpMyStruct)
{
printf("[CreateThreadExample] : malloc failed. (%d) \n", GetLastError());
__leave;
}
ZeroMemory(lpMyStruct, sizeof(MY_STRUCT));
lpMyStruct->ul1 = 1;
lpMyStruct->ul2 = 2;
lpMyStruct->ul3 = 3;
hThread = CreateThread(NULL, 0, ThreadProc, lpMyStruct, 0, NULL);
if (!hThread)
{
printf("[CreateThreadExample] : CreateThread failed. (%d) \n", GetLastError());
__leave;
}
bNeedDelResource = FALSE;
bRet = TRUE;
}
__finally
{
if (hThread)
CloseHandle(hThread);
if (bNeedDelResource)
{
if (lpMyStruct)
free(lpMyStruct);
}
}
return bRet;
}