我目前正在開發一個項目,我必須爲C++ dll構建一個shell,因此新的C#GUI可以使用它的函數。 但是我得到了以下問題,在C++部分,我必須爲特定原因創建一個新線程,並且我想將一個int數組傳遞給新線程。 請注意,在發生這種情況的函數中分配給數組的值是從代碼的C#部分獲得的。將指針數組作爲void指針傳遞給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),否則你會泄漏句柄和內存。 – SirDarius
我可能會爲此創建一個結構,但如果您想使用數組,爲什麼不在線程中使用數組符號?例如。 'int * iArray =(int *)lparam; int id = iArray [0]; int what = iArray [1];' –