我需要将二进制数据传递给本机线程。 我使用std :: string来保存二进制数据,我想出了如何将std :: string传递给本地字符串,并想知道它是否安全。
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;
DWORD WINAPI MyThreadFunction(LPVOID lpParam)
{
string binaryDataInThread = string(*(string*)lpParam); // copy data to current thread
while (true)
{// do some stuff with binaryDataInThread
cout << "thread binaryData size: " << binaryDataInThread.size() << endl;
Sleep(1000);
}
return 0;
}
int main(int argc, char *argv[])
{
{
string binaryDataInMain;
for (int i = 0; i < 500; i++)
binaryDataInMain += (char)i;
CloseHandle(CreateThread(NULL, NULL, MyThreadFunction, &binaryDataInMain, NULL, NULL));
Sleep(1000); // wait for thread to copy data
} // destroy binaryDataInMain
system("pause");
ExitProcess(0);
}
binaryDataInThread的大小为500,因此所有二进制数据都已成功通过。但它安全吗?
答案 0 :(得分:0)
没有你的方法不能保存,虽然不太可能失败。在奇怪的情况下,即使是第二个等待线程复制数据也是不够的。
建议:
new
动态分配数据。当然,该线程将负责使用delete
!