繁体   English   中英

在C,多线程,多窗口调用一个窗口过程,每个调用将使用新的局部变量或我需要一个互斥?

[英]In C, multithreaded, multiple windows calling one Window Procedure, will each call use new local variables or do I need a mutex?

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

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

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

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。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM