multithreading - 如何将字符串发送到 _beginthreadex 以供线程读取?
问题描述
我想使用 _beginthreadex 并传递一个字符串,即域的名称。通过它的正确方法/最佳实践是什么?
- 通过变量本身(sDomain)?
WCHAR sDomain[256] = {0};
//...copy domain into sDomain
UINT threadID = 0;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, sDomain, 0, &threadID);
- 还是通过变量的地址(&sDomain)?
WCHAR sDomain[256] = {0};
//...copy domain into sDomain
UINT threadID = 0;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, &sDomain, 0, &threadID);
- 还是我制作一个结构并传递结构元素(&sDomain[0])?
struct strDomain {TCHAR sDomain[256];};
strDomain *sDomain = new strDomain[1]();
//...copy domain into strDomain[0].sDomain
UINT threadID = 0;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, &sDomain[0], 0, &threadID);
解决方案
下面是最简单的代码实现,当然你可以自定义一些类型来传递,因为线程函数的参数类型是void,你可以做任何转换
#include <iostream>
using namespace std;
UINT Thread_SaveDomainName(LPVOID params)
{
char* szDomain = (char*)params;
cout<<szDomain<<endl;
return 0;
}
int main()
{
char* szDomain = "8080";
UINT threadID = -1;
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, (void*)szDomain, 0, &threadID);
return 0;
}
推荐阅读
- react-native - 如何在 react-native 中将数据从 api 添加到异步存储
- python - 动态保存表单
- asp.net - 教程要我“从 CDN 下载 signalr.js 文件”?
- emacs - 如何在 Emacs 中自动关闭括号?
- php - How to get count of opponents via PHP in a MySQL table
- javascript - KTDatatable (Metronic) 中的服务器端分页
- r - 如何将 proptable() 应用于 R 中的所有因子变量
- java - 从 JDK8 升级到 JDK 11 后,Web 服务(SOAP 调用)面临的问题:
- python - 层顺序的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 3,但接收到的输入具有形状
- java - 如何在Android Studio中集成tflite模型来识别声音(Java语言)