- 博客(13)
- 资源 (62)
- 收藏
- 关注
原创 线程同步之Signal ObjectAndWait()
前面提到过使用PulseEvent()函数时,如果线程还没准备好处于等待状态的话,那么这个触发脉冲就会丢失掉。例如下面的代码:线程一:SetEvent(hEvent1);WaiForSingleObject(hEvent2,INFINITE);线程二:WaiForSingleObject(hEvent1,INFINITE);PulseEvent(hEvent2);上面代码就会发
2018-01-31 16:26:17 626
原创 事件对象之 PulseEvent( )
BOOL PulseEvent( );Sets the state of the event to signaled (available), releases any waiting threads, and resets it to nonsignaled (unavailable) automatically.与SetEvent()函数的区别在于两点,PulseEvent( )相当
2018-01-31 16:03:02 1435
原创 window图像组件
今天在2003服务器上安装vs2010旗舰版时提示我需要安装windows图像组件,岁下载了一个:http://download.csdn.net/download/u012372584/10221363
2018-01-24 11:11:55 242
原创 生成一个全球唯一标识符GUID
主要函数原型:HRESULT CoCreateGuid( GUID* pguid );Parameterspguid [out] Pointer to the requested GUID on return. Return ValuesS_OK The GUID was successfully created. 其中,GUID的结构如下:typedef stru
2018-01-23 10:44:38 984
原创 临界区和代码段与条件变量的混合使用
1、当读者线程当没有数据可读取时,则应释放锁并等待,直到写者线程产生了新的数据。同理,当写者线程把数据结构写满时,那么写者应该释放SRWLock并等待,直到读者把数据结构清空。条件变量的目的让线程以原子方式释放锁并将自己阻塞,直到某一个条件成立,再唤醒自己。2、条件变量的使用方法:1)声明+初始化:CONDITION_VARIABLE cv;InitializeConditionVaria
2018-01-16 16:01:38 413
原创 Slim读写锁
基于http://blog.csdn.net/morewindows/article/details/7442333提出的经典问题,使用Slim读写锁解决。问题如下:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep(50) -> 全局变量++ -> sleep(0) -> 输出参数和全局变量。要求:1.子线
2018-01-16 12:53:25 473
原创 多线程同步之关键代码段
1、关键段的使用步骤:1)声明一个全局的关键段结构体变量:CRITICAL_SECTION g_Cs;2)初始化结构体变量:void InitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);3)进入关键段区域:EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSect
2018-01-15 16:17:41 582
原创 多线程同步之原子互锁家族
只针对32位值。1、加减1操作:LONG InterlockedIncrement( LONG volatile* Addend);LONG InterlockedDecrement( LONG volatile* Addend);返回值:返回变量执行增减操作之后的值。使用:int nValue(0);InterlockedIncreme
2018-01-15 13:44:33 383
原创 Socket封装类(事件对象)
直接上封装类的代码:#pragma onceclass CSocketEx{private: SOCKET m_hSocket; WSAEVENT EventArray[1];public: CSocketEx(void); virtual ~CSocketEx(void); BOOL Create(UINT nSocketPort = 0,int nSocketType
2018-01-09 08:34:16 1109
原创 1>nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned __int64)" (??2@YAPEA
错误描述:1> 所有输出均为最新。1>nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned __int64)" (??2@YAPEAX_K@Z) 已经在 LIBCMT.lib(new.obj) 中定义1>nafxcw.lib(afxmem.obj) : error LNK2005:
2018-01-05 09:55:05 3384
原创 Sleep(0)和SwitchToThread()
一、Sleep(0):时间片只能让给优先级相同或更高的线程,MSDN中:A value of zero causes the thread to relinquish the remainder of its time slice to any other thread of equal priority that is ready to run. SwitchToThread():只要
2018-01-03 14:49:43 2151 4
原创 挂起一个进程
Windows中并不存在挂起和恢复进程的概念。因为Windows中是以线程为单位来调度和分配CPU的。进程只相当于是一个承载线程的容器,系统不会给进程分配任何CPU.我们可以把挂起进程理解为挂起进程中所有的线程。Windows并没有提供此类API,但是我们可以通过CreateToolhelp32Snapshot()来实现我们自制的SuspendProcess().因为CreateToolhelp
2018-01-03 13:22:41 2450
转载 带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑
在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT、MTd、MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时候,及容易出现各种链接问题。看一下下面这个错误提示: LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined in
2018-01-02 10:09:01 2948
QLocalServer_QLocalSocket.rar
2020-02-18
opencv2.4.4库(.h/.lib/.dll)
2019-02-22
qt基于libev的多线程服务端
2018-10-31
Vs2010 + QT4.8.6 安装文件及配置详解
2018-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人