全部展开$(function () {//动态绑定默认状态//$ ('# ck ')。attr ('checked ',true)//已检查//$ ('# ck ')。attr ('ch
顺晟科技
2022-12-02 09:18:36
173
在Window中,所有进程都是相同的,但MFC将线程分为两种类型:UI线程和工作线程。不同的是,UI线程有消息循环,而工作线程没有。UI line程序可以创建窗口并向这些窗口发送消息,工作线程序主要负责后台任务。
临界区(CCRITICALSECTION)是共享资源中最简单的同步对象,用于跨范围同步,并用于使用在同一线路上不能超过非临界进入的范围临界区。
CCriticalSection g_cs(没有参数创建者)
G_cs。Lock可以锁定临界区域,并指定最大等待时间(毫秒)。
G_cs。解锁解除锁定
互斥锁可用于同步在相同或不同进程中运行的线程,临界区域的内部要求比互斥锁更快,因此比互斥锁更好。mutex最适合多路径项目。CMutex结构:
cmutex(bool binitial lyown=false,LPCTSTR lpszName=NULL,LP security _ attributes LPS attribute=NULL)
CMutex g_mutex(FALSE,_ T(' my mutex ')););
第一个参数指定互斥体的初始状态是锁定还是解锁。
第二个参数指定互斥体的名称。在多区带距离中使用时,必须指定相同的名称
锁定:g_mutex。锁();
解除锁定:g_mutex。unlock();
Lock函数可以指定以毫秒为单位的时间,作为最大超时等待时间。如果超时,lock函数将返回0。
互斥区和临界区之间还有另一个区别。如果一个进程锁定了共享资源,但在退出前未解除锁定,则其他等待进程将在相互排斥的情况下继续被拦截在临界区域下,如果进程终止,则相应的相互排斥进程将自动释放,等待进程将继续运行。
在给定时间,事件可以是两种状态之一:位置和重置。位置状态事件可以视为信号状态,重置状态事件可以视为非信号状态。主界面:
Cevent 33603360事件-cevent 33603360重置事件设置-cevent 33603360脉冲事件重置(用于手动重置事件)窗口支持两种类型的事件:自动重置事件和手动重置事件。其差异和用法如下:
如果此事件仅触发一条线路,则会使用自动重置事件,并使用set event唤醒等待的线路。不需要调用重置事件。因为线路醒来后,事件会自动重置。如果事件触发多个流程、行,则无需使用手动重置事件和PulseEvent唤醒所有等待的线程。因为PulseEvent会在唤醒所有线程时重置事件ce事件的基本结构。
cevent(BOOL binitial lyown=FALSE,BOOL bManualReset=FALSE,LPCTSTR lpszName=NULL,lpsecurity _ attrity)
BManualReset:指定是手动重置事件(TRUE)还是自动重置事件(FALSE)。
LpszName:指定与用于执行单一步骤的mutex相同的名称
LpsaAttribute:默认值为NULL。
此事件可以与用作原始信号生成机制的WaitForSingleObject函数一起使用。
CSEMAPHORE SEMAPHORE SEMAPHORE SEMAPHORE SEMAPHORE与前三种不同,总是存储表示可用资源数量的资源数量。锁定信号量会减少资源数量,关闭信号量会增加资源数量。只有当资源数为零时,锁定才会被阻止。信号量可以同步相同的线路路径或多条线路到路径。
CSemaphore(LONG lInitialCount=1,LONG lMaxCount=1,LPCTSTR pstrName=NULL,lpsecurity _ attributeslpsame)
第一个参数是初始资源编号为3。
第二个参数是资源的最大数量为3
第三个参数semapore的名称与事件的名称相同。
G_sem。锁();可以指定最大等待时间(毫秒)。
G_sem。unlock();
您还可以使用window32 API提供的原子操作来确保某些操作的同步。
对MFC开发感兴趣的人可以看这本书。
此外,某些相同的互斥机制也可应用于Linux环境。
05
2022-12
02
2022-12
02
2022-12
02
2022-12
02
2022-12
02
2022-12