吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2198|回复: 0
收起左侧

[C&C++ 转载] 【笔记】线程---事件之共享读取

[复制链接]
2016wapjpc 发表于 2017-7-23 15:59
当一个主线程跑完,其它子线程都可读取其内容。
捕获.PNG

[

DWORD WINAPI ThreadMain(LPVOID lpParameter        )
{    //创建事件,因为第2个参数是true,所以当用SetEvent(g_hEvent)设置改变了事件第3个参数为已通知的话,没有人再去
        //改变事件的状态为未通知,所以子进程都能wait到
       
        g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);        //创建事件后是未通知状态
       
        HANDLE hThread[3];       
        hThread[0] = ::CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);  
        hThread[1] = ::CreateThread(NULL,0,ThreadProc3,NULL,0,NULL);                
        hThread[2] = ::CreateThread(NULL,0,ThreadProc4,NULL,0,NULL);

        SetWindowText( hEdit1,"1000");

        SetEvent(g_hEvent);
        WaitForMultipleObjects(3,hThread,TRUE,-1);
        CloseHandle(hThread[0]);
        CloseHandle(hThread[1]);
        CloseHandle(hThread[2]);
        CloseHandle(g_hEvent);
       
        return 0;
}


BOOL CALLBACK MainDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) //回调函数是主线程
{
        BOOL bRet = FALSE;
       
        switch(uMsg)
        {
                case WM_CLOSE:
                {
                        EndDialog(hDlg,0);
                        break;
                }

                case WM_INITDIALOG:    //窗口初始化
                {
                        hEdit1=  GetDlgItem(hDlg,IDC_EDIT1 );
                        SetWindowText( hEdit1,"0");
                        hEdit2=  GetDlgItem(hDlg,IDC_EDIT2 );
                        SetWindowText( hEdit2,"0");
                        hEdit3=  GetDlgItem(hDlg,IDC_EDIT3 );
                        SetWindowText( hEdit3,"0");
                        hEdit4=  GetDlgItem(hDlg,IDC_EDIT4);
                        SetWindowText( hEdit4,"0");
                        break;
                }

                case WM_COMMAND:
                  switch(LOWORD(wParam))
                  {
                    case IDC_BUTTON1:
                                {
                                    hThread1 = ::CreateThread(NULL,0,ThreadMain,NULL,0,NULL);         
                                    ::CloseHandle(hThread1);
                                       return TRUE;
                                }

                  }
                break;
        }

    return bRet;
}


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

        DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,MainDlgProc);
        return 0;
}



]

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wentwent + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-14 20:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表