看板 C_and_CPP 關於我們 聯絡資訊
我要跑多執行緒 要有__stdcall的call convention: unsigned __stdcall Foo(void* lp) { int *pInt = (int*)lp; printf("%d\n", *pInt); return 0; } 這樣主程式才能使用: int main(int argc, wchar_t* argv[]) { HANDLE hThread; unsigned threadID; int* pInt = new int(10); hThread = (HANDLE)_beginthreadex(NULL, 0, Foo, pInt, 0, &threadID); printf("thread 1: %d\n", (const char*)hThread); hThread = (HANDLE)_beginthreadex(NULL, 0, Foo, pInt, 0, &threadID); printf("thread 2: %d\n", (const char*)hThread); getchar(); delete pInt; return 0; } 我有兩個問題: 1. 是因為_beginthreadex參數有__stdcall 所以callee要加call convention 還是因為是呼叫OS的API所以才要加call convention呢? 2. 我查資料後 文件是說__cdecl是C和C++程式的預設呼叫方式 那一般我們在宣告函式的時候 都不寫call convention是因為他預設是__cdecl呼叫 還是其他原因呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.6.181
suhorng:2.是因為 "我們需要用 __stdcall" 才特別加上去的吧? 02/18 13:09
suhorng:因為 Windows 下幾乎都是以 __stdcall 為標準 ? 02/18 13:10
VictorTom:預設call convention不是compiler可以設嗎?? 小弟我記得 02/18 13:51
VictorTom:VC裡就有一個地方在設這個@_@" 02/18 13:51
wowtiger:不推薦在 compiler 上面設定, 會引發更多問題 02/18 15:20
LPH66:1.正確說來是 _beginthreadex 裡在呼叫你的 callback 函式時 02/18 15:44
LPH66: (以你這裡就是你的 Foo) 它預設那個函式是 __stdcall 02/18 15:45
LPH66: 講預設好像不太對 它期待那個函式是 __stdcall 02/18 15:45