【发布时间】:2012-11-08 09:03:48
【问题描述】:
我目前正在做一个项目,我必须为 C++ dll 构建一个 shell,以便新的 C# GUI 可以使用它的功能。 但是我遇到了以下问题,在 C++ 部分中,出于特定原因我必须创建一个新线程,并且我想将一个 int 数组传递给新线程。 请注意,在发生这种情况的函数中分配给数组的值是从代码的 C# 部分获得的。
__declspec( dllexport ) void CreateReportPane(int &id, int &what)
{
DWORD threadId;
int iArray[2] = { id, what};
HANDLE hThread = CreateThread( NULL, 0, CreateReportPaneThread, iArray, 0, &threadId);
if (hThread == NULL)
{
ExitProcess(3);
}
}
问题出现在新线程中,我可以可靠地从数组中取出第一个值,但是第二个值似乎被释放了,这是另一边的代码。
DWORD WINAPI CreateReportPaneThread(LPVOID lparam)
{
int id, what;
id = *(( int * )lparam);
what = *(((int *)lparam)+1) ;
CreateReportPaneOriginal(id, what);
return 0;
}
有什么方法可以防止数组中的值在不保留原始线程的情况下被释放? 提前非常感谢您
【问题讨论】:
-
别忘了 CloseHandle(hThread),否则你会泄漏句柄和内存。
-
我可能会为此创建一个结构,但是如果您想使用数组,为什么不在线程中使用数组表示法呢?例如。
int* iArray = (int*) lparam; int id = iArray[0]; int what = iArray[1];
标签: c++ arrays multithreading pointers void