创建线程时安全传递参数例子
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; }
相关文章推荐
- [原创]vc中创建线程并传递参数
- 使用NSOperation使用,创建线程中传递多个参数
- 创建一个pthread线程时如何传递参数
- CreateThread创建线程传递结构体参数
- 一个理解js动态创建节点并注册事件及传递参数的例子
- 创建线程时候多参数传递方法及参数改变问题--扫雷辅助(三)
- pthread_create()给创建的线程传递参数
- [转]VC++创建一个线程并传递参数
- 创建线程时参数传递技巧-用指针传值
- 参数按照引用传递创建线程
- C#创建线程传递参数
- VC++ 如何创建一个线程并传递参数
- CreateThread创建线程传递结构体参数
- 在内存理解上,最著名的例子就是线程启动时的参数传递
- 创建多个线程的参数传递问题
- [转]创建线程并传递参数--AfxBeginThread
- VS C++ 线程篇之二创建线程(传递参数)
- 如何向线程传递参数
- ReportView如何使用构造SQL语句带参数的存储过程创建报表以及为rdlc传递参数
- 多线程:如果在调用线程时传递参数