64,644
社区成员
发帖
与我相关
我的任务
分享
void start(DWORD param)
{
HANDLE thread = CreateThread(NULL,0,param,NULL,0,NULL);
}
DWORD WINAPI threadFuc1(LPVOID ipParameter)
{
........
}
DWORD WINAPI threadFuc2(LPVOID ipParameter)
{
........
}
//如上,CreateThread 在函数中时,如何把函数名传过去,填写CreateThread的第三个参数(即线程函数)
typedef DWORD (WINAPI* THREAD_FUNC_NAME )(LPVOID);
DWORD WINAPI thread1(LPVOID lpParam)
{
std::cout << "thread 1 run" << std::endl;
return 1;
}
DWORD WINAPI thread2(LPVOID lpParam)
{
std::cout << "thread 2 run" << std::endl;
return 1;
}
void start(THREAD_FUNC_NAME threadFun)
{
HANDLE handle_thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadFun, NULL, 0, NULL);
}
void CFindFileDlg::OnBnClickedBtnFindfile()
{
start(thread1);
start(thread2);
}
这样用吧,我个人觉得用DWORD接收参数不好,应该明确接收某种类型的。
void start(DWORD threadFuc)
{
HANDLE thread = CreateThread(NULL,0,threadFuc,NULL,0,NULL);
}
DWORD WINAPI threadFuc1(LPVOID ipParameter)
{
........
}
DWORD WINAPI threadFuc2(LPVOID ipParameter)
{
........
}
void main()
{
start(threadFuc1);
start(threadFuc2);
}
可能没表述清楚吧,我希望的结果是这样,通过调用start时赋给不同的参数产生不同的线程。。
CreateThread(NULL, 0, threadFuc1, param, 0, NULL);
MSDN中CreateThread原型:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
SIZE_T dwStackSize, // initial stack size
LPTHREAD_START_ROUTINE lpStartAddress, // thread function 这个传的函数指针了
LPVOID lpParameter, // thread argument
DWORD dwCreationFlags, // creation option
LPDWORD lpThreadId // thread identifier
);