1

タイトルですべて説明しようとしました。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

window proc関数を呼び出すたびにスタックに新しいコピーが割り当てられるため、ローカル変数を保護する必要はありません。

ただし、ミューテックスやその他の同期メカニズムの必要性を回避するには、ウィンドウproc関数内から呼び出される関数(GetConversationこの関数が呼び出す関数など)がスレッドセーフであることも確認する必要があることに注意してください。

于 2012-04-27T04:08:27.923 に答える
0

ミューテックスでスタック変数を保護する必要はありません。

于 2012-04-27T03:51:51.377 に答える