C++如何用参数调用线程
C++ how can I call a thread with parameters
可能重复:
将参数传递到_beginthreadex
如何使用beginthreadex
调用TestFunction2
而不是ExecuteLocalThread
中的TestFunction1
,因为TestFunction2
包含3个附加参数
unsigned __stdcall TestFunction1(void* timerPointer)
{
unsigned result =0;
printf("thread is runningn");
return result;
}
unsigned __stdcall TestFunction2(void* timerPointer, wchar_t *appId, wchar_t *userName, wchar_t *password)
{
unsigned result =0;
printf("thread is runningn");
return result;
}
void ExecuteLocalThread()
{
HANDLE heartBeatThread;
unsigned int hbThreadID;
heartBeatThread = (HANDLE)_beginthreadex(NULL, 0 , &TestFunction1, (void*)this, CREATE_SUSPENDED, &hbThreadID);
ResumeThread( heartBeatThread );
}
使用C++11线程:
std::thread thr(func, arg0, arg1, arg2);
创建一个包含要传递的所有数据的结构,然后将指向该结构的指针传递到线程入口点
typedef struct MyThreadData {
void* timerPointer;
wchar_t *appId;
wchar_t *userName;
wchar_t *password;
}; MyThreadData
unsigned int hbThreadID;
void* threadData = calloc(1, sizeof(*threadData));
/* populate threadData */
heartBeatThread = (HANDLE)_beginthreadex(NULL, 0,
&TestFunction1, threadData,
CREATE_SUSPENDED, &hbThreadID);
unsigned __stdcall TestFunction1(void* ptr) {
MyThreadData* threadData = (MyThreadData*)ptr;
unsigned result;
printf("thread is runningn");
result = TestFunction2(ptr->timerPointer, ptr->appId, ptr->userName, ptr->password);
free(threadData);
return result;
}
unsigned __stdcall TestFunction2(void* timerPointer, wchar_t *appId, wchar_t *userName, wchar_t *password) {
unsigned result =0;
return result;
}
按照建议创建结构即可。如果代码在一个类中,并且该类已经包含信息,那么您也可以使用它:
unsigned __stdcall TestFunctionProxy(void* p)
{
assert(p);
MyClass* c = static_cast<MyClass*>(p);
c->TestFunction();
return 0;
}
如果因为TestFunction((是私有的,所以这不起作用,请将其作为友元函数。BTW:在挂起状态下启动线程然后释放它是不必要的。直接启动线程即可。
最后,请记住,使用适当的C++线程库(如Boost.Thread(将使其更加灵活,并为您的问题提供如何传递更多参数的解决方案。
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在另一个线程中调用luaL_error会引发qWarning
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 如何从线程中的不同模块调用函数?
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 是否可以创建一个从不同类调用函数的线程?
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 非静态成员失败的线程调用函数
- 线程调用的函数对对象删除是否安全?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 通过 Qt 中的线程调用 Rust 库
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 由并发无序映射查找线程调用的函数是否安全?
- 每个线程 C++ 保护以防止重入函数调用
- localtime() 函数正在调用 ___lll_lock_wait_private(),这会使线程陷入死锁
- 当我在C++中调用 struce 的只读静态成员时,线程是否安全
- 线程 std::调用未知类型,无法专门化函数错误
- 工作线程一直在等待,condition_variable甚至调用了notify_all