huangyi5209

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 13 Stories :: 0 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

线程同步(for Win32)

#include <windows.h>
#include 
<iostream>

using namespace std;

static int g_n;
CRITICAL_SECTION m_cs;

UINT ThreadOne(LPVOID lParam)
{
    EnterCriticalSection(
&m_cs);

    
for (int i = 0; i < 10; i++)
    
{
        g_n
++;
        cout
<<"Thread 1:"<<g_n<<"\n";
    }

    LeaveCriticalSection(
&m_cs);
    
return 0;
}


UINT ThreadTwo(LPVOID lParam)
{
    EnterCriticalSection(
&m_cs);

    
for (int i = 0; i < 10; i++)
    
{
        g_n
++;
        cout
<<"Thread 2:"<<g_n<<"\n";
    }

    LeaveCriticalSection(
&m_cs);
    
return 0;
}


int main()
{
    HANDLE hThrd[
2];
    DWORD IDThread1,IDThread2;

    InitializeCriticalSection(
&m_cs);
    
    hThrd[
0= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadOne, (LPVOID)NULL, 0&IDThread1);
    hThrd[
1= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadTwo, (LPVOID)NULL, 0&IDThread1);

    WaitForMultipleObjects(
2, hThrd, TRUE, INFINITE);
    DeleteCriticalSection(
&m_cs);

    system(
"pause");
    
return 0;
}

线程同步(for MFC)
#include "win32_mfc.h"
#include 
<afxmt.h>
#include 
<iostream>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 唯一的应用程序对象

CWinApp theApp;

using namespace std;

CCriticalSection c_s;
static int g_C;

UINT ThreadFunction1(LPVOID lParam)
{
    CSingleLock 
lock(&c_s);

    
lock.Lock();

    
for (int i = 0; i < 10; i++)
    
{
        g_C
++;
        cout
<<  "Thread 1 : " << g_C << endl;
    }

    
lock.Unlock();
    
return 0;
}


UINT ThreadFunction2(LPVOID lParam)
{
    CSingleLock 
lock(&c_s);

    
lock.Lock();

    
for (int i = 0; i < 10; i++)
    
{
        g_C
++;
        cout
<<  "Thread 2 : " << g_C << endl;
    }

    
lock.Unlock();
    
return 0;
}


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    
int nRetCode = 0;

    
// 初始化 MFC 并在失败时显示错误
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    
{
        
// TODO: 更改错误代码以符合您的需要
        _tprintf(_T("错误: MFC 初始化失败\n"));
        nRetCode 
= 1;
    }

    
else
    
{
        
// TODO: 在此处为应用程序的行为编写代码。
        CWinThread *Thread[2];
        HANDLE hand[
2];

        Thread[
0= AfxBeginThread(ThreadFunction1, (LPVOID)NULL);
        Thread[
1= AfxBeginThread(ThreadFunction2, (LPVOID)NULL);

        
for (int i = 0; i < 2; i++)
            hand[i] 
= Thread[i]->m_hThread;

        WaitForMultipleObjects(
2, hand, TRUE, INFINITE);
    }


    system(
"pause");
    
return nRetCode;
}


posted on 2011-03-06 09:26 huangyi5209 阅读(252) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理