1

我试图在标题中解释这一切:我有一个多线程 C 程序,它将有多个窗口调用一个窗口过程。

在窗口过程中进行了一些处理。我需要保护它,还是每次调用窗口过程都会在内存中分开?

我的直觉是我不需要互斥体,因为它们都是局部变量,这是错误的吗?

LRESULT APIENTRY EditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{   
    if (uMsg == WM_GETDLGCODE) 
        return DLGC_WANTALLKEYS;
    else if(uMsg == WM_CHAR)
    {
        if( (int) wParam == 13)
        {
            char* strCurrentCommand;

            unsigned long ulThisConversation = GetConversation(0, 0, hwnd, 0, 0);
            ...

我关心局部变量 strCurrentCommand 和 ulThisConversation。

4

3 回答 3

3

函数的局部变量和参数放在堆栈上。每个线程都有自己的堆栈,函数的每次调用都会在它正在运行的线程的堆栈上获得一个空间,用于存放其参数和局部变量。所以你没事。

于 2012-04-27T03:57:32.100 回答
0

您不需要使用互斥锁保护堆栈变量。

于 2012-04-27T03:51:51.377 回答
0

无需保护局部变量,因为每次调用 window proc 函数都会在堆栈上分配新的副本。

但请记住,为了避免需要互斥锁或其他同步机制,您还需要确保从窗口 proc 函数内部调用的GetConversation任何函数(如该函数调用的任何函数)都是线程安全的。

于 2012-04-27T04:08:27.923 回答