2013-07-27 23:59
⁄ 工业·编程
⁄ 共 722字
一、四种同步方法
互斥量、临界段、事件、信号量
二、同步的原因
我们之所以在线程之间进行同步,是因为:
1、由于线程间竞争共享资源。
2、为完成某个任务而需要协作。
总的来说就是因为竞争和协作。
三、Win32 API——API函数——MFC封装
CSyncObject同步对象:CEvent、CSemaphore、CMutex、CCriticalSetion
同步访问对象:CMultiLock、CSingleLock
四、异同
1、互斥量、事件、信号量:内核对象,可用于进程之间同步
临界段:只能...
多线程编程阅读全文
2013-07-27 23:57
⁄ 工业·编程
⁄ 共 1668字
一、具体实现:
CSemaphore::CSemaphore(LONG lInitialCount,LONG lMaxCount,LPCTSTR pstrName,
LPSECURTY_ATTRIBUTES lpsaAttribute):CSyncObject(pstrName)
CSemaphore::~CSemaphore()
_AFXMT_INLINE BOOL CSemaphore::Unlock()
BOOL CSemaphore::Unlock(LONG lCount,LPCTSTR lpPrevCount)
二、关于带参数的 Lock()函数的使用(例子)
用一个二维数组模拟三个串行端口
在这个例子用到三个对象:信号量,用于对串行口的资源...
多线程编程阅读全文
2013-07-27 23:56
⁄ 工业·编程
⁄ 共 1350字
一、关于信号量
1、在信号量中有一个内置的计数值,用于对资源进行计数;同时它通过内置的互斥机制保证在有多个线程试图对计数值进行修改时,在任一时刻只有一个线程对计数值进行修改。
2、信号量的两个核心操作是Up操作(提高计数值)和Down操作(降低计数值):
1)Down操作:
检查信号量的计数值是否大于零
1》若大于零,信号量的计数值减一(即用掉了一个信号量计数了),线程继续运行;
2》若等于零(也就是线程不能获得所...
多线程编程阅读全文
2013-07-27 23:54
⁄ 工业·编程
⁄ 共 1497字
一、实现
CEvent::CEvent(BOOL bInitiallyOwn,BOOL bManualReset,LPCTSTR pstrName,
LPSECURTY_ATTRIBUTES lpsaAttribute):CSyncObject(pstrName)
CEvent::~CEvent()
BOOL CEvent::Unlock()
在文件AFXMT.inl中实现了其他几个函数,为了提高效率,它们被定义为内联函数:
AFXMTINLINE BOOL CEvent::SetEvent()
AFXMTINLINE BOOL CEvent::PulseEvent()
AFXMTINLINE BOOL CEvent::ResetEvent()
CEvent没有重载Lock(),它继承了CSync...
多线程编程阅读全文
2013-07-27 23:53
⁄ 工业·编程
⁄ 共 2567字
一、Event的有关函数
CreateEvent() 创建一个事件
OpenEvent() 打开一个已经创建的事件:使多个进程打开同一个事件对象的句柄,
从而达到进程之间同步的目的。
它只有在指定名称的事件对象已在其他地方被创建时才调用成功
SetEvent() 触发一个事件:将事件置为有信号状态
ResetEvent() 复位一个事件:将一个事件重置为无信号状态
PulseEvent() 触发并重置一个事件:使所有等待该事件的线程运行,...
多线程编程阅读全文
2013-07-27 23:52
⁄ 工业·编程
⁄ 共 2794字
一、具体实现:
_AFXMT_INLINE CCriticalSection::CCriticalSection()
_AFXMT_INLINE CCriticalSection::operator CRITICAL_SECTION*()
_AFXMT_INLINE CCriticalSection::~CCriticalSection()
_AFXMT_INLINE BOOL CCriticalSection::Lock()
_AFXMT_INLINE BOOL CCriticalSection::Lock(DWORD )
_AFXMT_INLINE BOOL CCriticalSection::Unlock()
二、与互斥量比较
1、和CMutex类相似,也分两种情况:单独使用,和CSingleLock使用...
多线程编程阅读全文
2013-07-27 23:51
⁄ 工业·编程
⁄ 共 1597字
一、有关函数:
InitializeCriticalSection() 创建一个临界段
DeleteCriticalSection() 释放一个临界段
EnterCriticalSection() 获取对临界段的所有权,独占共享资源
TryEnterCriticalSection() 试图获得对临界段的所有权,但不阻塞
LeaveCriticalSection() 释放对资源的所有权
二、举例
1,
#include<windows.h> #include<process.h> #include<stdio.h> CRITICAL_SEC...
多线程编程阅读全文
2013-07-27 23:50
⁄ 工业·编程
⁄ 共 2395字
一、关于CMutex类
1、CMutex只是对 win32API 的互斥操作进行了封装
2、它的参数与 win32 API 中的 CreatMutex() 相对应
3、CMutex的构造函数调用 CreatMutex() 创建并检查
4、其Lock操作从基类继承,调用WaitForSingleObject()获得所有权,互斥类重载 Unlock 调用ReleaseMutex()释放所有权。
所以,MFC其实就是简单了封装了 win32 API 函数。
二、CMutex的实现:
1、CMutex::CMutex(BOOL bInitiallyOwn, LPCTSTR pstrMame)
2、C...
多线程编程阅读全文
2013-07-27 23:48
⁄ 工业·编程
⁄ 共 1087字
1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法;
然后将图像格式和矩阵运算,然后将各个算法的实现函数。 我用它来做了一个Harris角点检测器和Canny边缘检测器,总共就花了一个小时(第一次用OpenCV)。 而且该库显示图像极其方便,两句话就可以。 但该库似乎不大稳定,对32F和16S、8U的图像数...
UI界面阅读全文
2013-07-27 23:47
⁄ 工业·编程
⁄ 共 1107字
第一种方法:使用OnDraw 成员函数
void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->MoveTo(20,30); pDC->LineTo(200,300); }
第二种方法:使用CDC *pDC 的菜单调用方式 ⑴在MFC框架中的【FileView】面板中,双...
UI界面阅读全文