本文介绍了如何使用Cmutex和Cevent暂停和恢复线程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的编码:
//declaration UINT thread(LPVOID param); UINT thread2(LPVOID param); CWinThread *pThread1,*pThread2; CMutex g_m; CSingleLock lock1(&g_m); CSingleLock lock2(&g_m); //Implementation void CMythreadDlg::OnBnClickedOk() { p.pDlg = this; pThread1 = AfxBeginThread(thread, (LPVOID)&p); } void CMythreadDlg::OnBnClickedButton1() { p.pDlg = this; pThread2 = AfxBeginThread(thread2, (LPVOID)&p); } UINT thread(LPVOID param) { lock1.Lock(); //do some process lock1.Unlock(); return 0; } UINT thread2(LPVOID param) { lock2.Lock(); //do some process lock2.Unlock(); return 0; }
我的问题:
我将单击事件处理程序,先前的工作线程已停止,另一个线程正在启动进程.
之后线程工作将完成,然后开始工作,停止线程.如何做到这一点,请使用Windows窗口,您应始终使用WaitforEvents且永远不要锁定:一个事件警告线程!并使用Windows消息调度程序为每个正在运行的Windows进程工作:那么为什么要在具有两个不同锁的两个进程之间进行锁:您的程序部分是否设置了锁,并且同一锁又避免了两个线程之间的冲突?
最好的方法是使用互斥锁以获得最佳性能,并使用相同的互斥锁.
My Coding:
//declaration UINT thread(LPVOID param); UINT thread2(LPVOID param); CWinThread *pThread1,*pThread2; CMutex g_m; CSingleLock lock1(&g_m); CSingleLock lock2(&g_m); //Implementation void CMythreadDlg::OnBnClickedOk() { p.pDlg = this; pThread1 = AfxBeginThread(thread, (LPVOID)&p); } void CMythreadDlg::OnBnClickedButton1() { p.pDlg = this; pThread2 = AfxBeginThread(thread2, (LPVOID)&p); } UINT thread(LPVOID param) { lock1.Lock(); //do some process lock1.Unlock(); return 0; } UINT thread2(LPVOID param) { lock2.Lock(); //do some process lock2.Unlock(); return 0; }
My question:
I will click event handler previous working thread is stopped and another thread is start process.After
thread work will be finished and then start work stopped thread .how can do this,give sample
解决方案
这篇关于如何使用Cmutex和Cevent暂停和恢复线程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!