使用CMutex对象可以在不同的进程的线程间实现资源的安全共享.
CMutex g_Mutex(FALSE, "Mutex1");
//在不同应用程序间实现线程的同步必须为互斥量取一个名字
UINT MutexThread(LPVOID pParam)
{
HWND hwnd = (HWND)pParam;
while(TRUE)
{
CString str;
g_Mutex.Lock();
str = "锁定数据";
::SetDlgItemText((HWND)pParam,IDC_EDIT1,str);
::Sleep(3000);
g_Mutex.Unlock();
str = "释放锁定";
::SetDlgItemText((HWND)pParam,IDC_EDIT1,str);
::Sleep(2000);
}
return 0;
}
/
程序实例:
创建一个工作进程,使用CMutex锁定数据3秒,然后解除锁定,2秒后再次锁定并循环.开启多个进程,可以发现同时只有一个工作进程可以锁定数据
CMutex g_Mutex(FALSE, "Mutex1");
//在不同应用程序间实现线程的同步必须为互斥量取一个名字
UINT MutexThread(LPVOID pParam)
{
HWND hwnd = (HWND)pParam;
while(TRUE)
{
CString str;
g_Mutex.Lock();
str = "锁定数据";
::SetDlgItemText((HWND)pParam,IDC_EDIT1,str);
::Sleep(3000);
g_Mutex.Unlock();
str = "释放锁定";
::SetDlgItemText((HWND)pParam,IDC_EDIT1,str);
::Sleep(2000);
}
return 0;
}
/
//启动线程代码
void CMutexProcessSynDlg::OnRun()
{
// TODO: Add your control notification handler code here
HWND hWnd = GetSafeHwnd();
//获取窗口句柄
AfxBeginThread(MutexThread,hWnd);
//产生新进程
}
{
// TODO: Add your control notification handler code here
HWND hWnd = GetSafeHwnd();
//获取窗口句柄
AfxBeginThread(MutexThread,hWnd);
//产生新进程
}