首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++多线程 CreateThread传参有关问题

2013-09-10 
C++多线程CreateThread传参问题void start(DWORD param){HANDLE thread CreateThread(NULL,0,param,NULL

C++多线程 CreateThread传参问题


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接收参数不好,应该明确接收某种类型的。
[解决办法]
强转吧!,不然就象9楼这样就最好了!
如还想传线程参数,定义个结构传指针,修改start的实现即可:

引用:


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接收参数不好,应该明确接收某种类型的。


引用:


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接收参数不好,应该明确接收某种类型的。

热点排行