您的位置:首页 > 其它

创建线程时安全传递参数例子

2014-12-30 12:43 239 查看
虽然传参不是由分配者去释放的,但是这样做既能保证参数传递的安全性,又能不影响创建者线程的正常工作,也不需要使用事件或者锁

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: