c++开发过程中遇到的线程问题

多线程编程,在不同的编程语言或库下面有不同的 多线程方法。

如 MFC下的 pThread = AfxBeginThread(mythread2, (LPVOID)this, NULL); 不太好用。

下面是C++标准库下的多线程编程方法,多线程编程一般都与信号关联,通过信号来决定线程的启动、挂起、重启、关闭等。

主要有这几个函数

1、创建一个信号 Handle hEvent =  CreateEvent(NULL,true,true,NULL);

2、创建一个线程 Handle hThread = CreateThread(NULL, 0, InitThreadProc, this, 0, &m_dwThreadID);

3、SetEvent(m_hEvent);设置信号,有信号状态

4、ResetEvent(m_hEvent);重置信号,无信号状态

5、Dword dwStatus = WaitForSingleObject(m_hEvent, INFINITE);等待一个信号,ININITE无限等下去,直到有信号接受,返回;若是0,马上返回。

6、ColseHandle(m_hThread);//关闭一个线程。

7、GetExitCodeThread(m_hThread, &dwCode);获取一个已终止线程的退出代码,非0表示成功,0表示失败,会设置GetLastError().

类中也可以设置一些参数,当类的局部变量,供类使用。

基本上C++的多线程编程就这么多,总之线程和信号的连接使用,变化多端。

时间: 2024-10-13 02:25:06

c++开发过程中遇到的线程问题的相关文章

c++开发过程中遇到的线程问(二)

MFC多线程编程的核心对象 Event.Mutex.Semaphore.  file.file-mapping.process.thread 前三个用于线程的同步化. (1) 进程操作:CreateProcess(); TerminateProcess();ExitProcess(); 线程操作:CreateThread();ExitThread()主要是系统调用的:TerminateThread()别的线程强制终止掉它,太过毒辣,少用为妙. (2) CriticalSection.Mutex.

android app 开发过程中 对于性能优化的总结

一款手机应用  从开发过程中就要做好 性能优化,这样才能 让用户体验度 提升, 假如 我们打开一个应用 出现卡顿, 不流畅,则会很影响 用户对该应用的态度,产品狗 都很注意这些人机交互方面的 体验. 谷歌官方也是一直在优化 android 系统,不论是  碎片化处理 还是 系能 上面,这方面 ios 就做的比较好,配置比 android 低,但是流畅度却比android高,体验效果更好. 官方推荐方案:http://www.oschina.net/news/60157/android-perfo

iOS开发过程中使用Core Data应避免的十个错误

原文出处: informit   译文出处:cocoachina Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据.对很多开发者来说,Core Data比较容易入手,但很难精通,如果没有正确的学习方法,你将很难真正理解它,更不用说精通了.很多开发者常常在这方面犯一些错误,而这篇文章列出了开发者在iOS开发过程中使用Core Data常见的一些错误,并对如何避免这些错误进行了分析.  1.不了解关键术语 对于iOS开发者来说,会使用Core Data是一项必备技能.

记录开发过程中遇到的2个小bug

1.使用新建线程结合handler来更新UI线程中的 ListView,快速点击"刷新",会出现下面的错误:  The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI th

Android开发过程中的部分经验总结

该文章为Android App 开发过程中遇到的常见问题总结,该总结也会持续不断的优化 完善当中.后续开发中一定会遇到各种各样的问题, 这些问题会酌情不断补充进来. 我将遇到的问题分为两大类,非技术问题和技术问题. 一. 非技术问题. 非技术上的问题一般为项目的管理问题,重点是项目开发过程中的协调沟通问题. 1. 项目的开展. 2. 项目的进展. 3. 项目的跟踪. 4. 项目完成总结与评价. 二. 技术层面的问题. 1.  代码规范问题. 该问题曾在公司内部的技术分享群中我曾经提出过,我个人认

.NET开发过程中的全文索引使用技巧之Solr(转)

前言:相信许多人都听说过.net开发过程中基于Lucene.net实现的全文索引,而Solr是一个高性能,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引引擎,这里我就绕过Lucene,直接说Solr的应用了,总之,Solr比Lucene更加方便简洁好用,而且上手快,开发效率高.    Solr应用场景:涉及到大数据的全文搜索.尤其是电子商务平

项目开发过程中,一些常用的方法

以下一些在开发过程中封装的常用方法,供参考由于一些方法是很久之前写下来的,语法上比较旧,再使用的时候再进行修改//获取当前时刻的时间 // type = 1年月日,type=2时分秒,fommatter="-"表示年月日用-隔开,否则用"/"隔开 export function curTimeFun(type,fommatter) { const myDate = new Date(); const year = myDate.getFullYear()>9?

软件开发过程中的审查 (Review)

http://blog.csdn.net/horkychen/article/details/5035769 软件开发过程中的审查 (Review) 希望别人做些什么->定义出流程 希望别人做出正确的结果->定义出审查制度 软件开发项目中包括很多的审查动作,贯穿于整个开发过程.个人认为审查主要有以下目的: 1.尽早排查出潜在的问题(Potential Risk/Issue) 经过其他人的参与,以不同的视角提出不同的看法,会有类似头脑风暴的效果,集思广议来查找工程师未能注意的问题. 2.保持良好

C#如何判断线程池中所有的线程是否已经完成之Demo

1 start: 2 3 System.Threading.RegisteredWaitHandle rhw = null; 4 new Action(() => 5 { 6 for (var i = 0; i < 30; i++) { 7 new Action<int>((index) => 8 { 9 System.Threading.Thread.Sleep(1000); 10 Console.WriteLine(System.Threading.Thread.Curr