0
我有消息框的一個奇怪的行爲開始在一個線程中使用此代碼:MessageBox的線程問題
DWORD WINAPI CreateMessageBox(LPVOID lpParam) {
MessageBoxA(NULL, (char*)lpParam, "", MB_OK);
return 0;
}
std::string msg = "Hello World";
CreateThread(NULL, 0, &CreateMessageBox, msg.c_str(), 0, NULL);
儘管此代碼正常工作:
DWORD WINAPI CreateMessageBox(LPVOID lpParam) {
MessageBoxA(NULL, (char*)lpParam, "", MB_OK);
return 0;
}
CreateThread(NULL, 0, &CreateMessageBox, "Hello World", 0, NULL);
我不明白爲什麼它的工作當它不是一個變量,並且如果我將它更改爲一個變量,則會顯示一個空的MessageBox,但我期望得到一個「Hello World!」
你能提供一個例子嗎?我不明白你的意思。如果我將msg聲明爲靜態(是我認爲最簡單的),我會遇到Segmentation故障,所以我將它改回來,因爲您寫的不是一個好主意。你能否給我一個例子,說明你對其他兩件事的含義? – user2855954
如果您使用靜態變量,則不應該發生訪問衝突。無論如何,關於第三個選項,你在某個類中有這個代碼,對吧?我的意思是你用'C++'標籤標記了你的問題。然後將'std :: string msg'作爲成員變量添加到該類。 – user1764961