随笔分类 - 多线程
摘要:最近需要做网络传输的项目,需要实现较大文件的传输。在网上收集了不少资料,但是各有各的做法,尤其是关于文件自动接收这一块不太清楚。 经过图书馆查阅后还是找到了一种解决办法,虽然做的不太专业,但是思路比较精简、清晰,也希望能给大家尤其是刚学习socket套接字的人一些启示。 对于套接字socket我其实也不太懂,并且一般资料都可以查找到,所以不交易累赘了,直接说如何实现文件的传输吧。 对于发送文件,有三步:发送文件长度,发送文件名,发送文件内容。 关于发送文件内容,又可以根据文件大小进行直接传输和分块传输,如果是分块传输还需要多线程,否则会容易使程序失去响应...
阅读全文
摘要:使用互斥对象实现线程同步 互斥对象属于系统内核对象,它能够使线程拥有对某个资源的绝对访问权。互斥对象主要包含使用数量,线程ID和递归计数器等信息。其中线程ID表示当前拥有互斥对象的线程,递归计数器表示线程拥有互斥对象的次数。 互斥对象的使用方式:当互斥对象的线程ID为0时,表示互斥对象不被任何线程拥有,此时系统会发出该互斥对象的通知信号。等待互斥对象的某个线程将会拥有该互斥对象,同时互斥对象的线程ID为拥有该互斥对象线程的ID。 当互斥对象的线程ID不是0时,表示当前有线程拥有该互斥对象。系统不会发出互斥对象的通知信号。其他等待互斥对象的线程继续等待,直到拥有互斥对象的线程释放互斥对象的拥有权
阅读全文
摘要:线程同步,由于多个线程同时访问进程中的同一个资源,这就可能造成线程之间的混乱,因此需要线程同步解决相关问题1:使用事件对象实现线程同步 相关函数 CreateEvent:用于创建一个事件对象 HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset, BOOL bInitialState,LPCTSTR lpName); lpEventAttributes:表示事件对象的安全属性 bManualReset:表示事件对象的类型,TRUE表示人工重置事件对象,FALSE表示自动重置事件 对象 bIni.
阅读全文
摘要://如果是利用h=AfxBeginThread()创建线程,需要获取句柄,h->m_hThread线程的挂起在CreateThread()等函数创建线程时,可以指定线程的挂起状态,在运行过程中也可以挂起线程 DWORD SuspendThread(HANDLE hThread); hThread表示线程的句柄 返回值:成功,返回值为之前挂起的线程次数,失败返回0Xffffffff线程的唤醒通过唤醒线程恢复线程的执行 DWORD ResumeThread(HANDLE hThread);线程的终止3种方式//建议第一种方法 1:DWORD dwExit; BOOL ret=GetExitT
阅读全文
摘要:MFC使用AfxBeginThread()函数创建线程CWinThread *AfxBeginThread(AFX_THREADPROC pfnThreadProc,LPVOID pParam,int nPriority=THREAD_PRIORITY_NORMAL,UINT nStackSize=0,DWORD dwCreateFlags=0,LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL)CWinThread *AfxBeginThread(CRuntimeClass *pThreadClass,int nPriority=THREAD_PRIORIT
阅读全文
浙公网安备 33010602011771号