草庐IT

C++11多线程—thread

全部标签

c++ - 设计线程类

我有一个设计问题。为发送和接收定义单独的类是否更好。或者,定义单个Thread类是否更好?我喜欢单个Thread类的想法,因为它更容易共享可以被互斥锁锁定的队列。设计选项#1(独立):mySendThread=newSendThread();//HavethreadpropertiesandseparatemembersmyRcvThread=newRcvThread();//Havethreadpropertiesandseparatemembers设计选项#2(主):主线程-Execute(){if(threadType==RCV_THREAD){globalVar=newMast

windows - 什么会导致 C++Builder/Delphi 线程和应用程序无法关闭?

有一次,在测试期间,我的C++Builder/Delphi应用程序在后台工作线程中引发了一个未捕获的异常。EurekaLog如我所料,捕获了异常并发送了错误报告,一切似乎都正常。但是,当我关闭应用程序的主窗口时,某些东西仍在后台运行,因为该应用程序仍在任务管理器中列出(并且仍然有打开的资源)。我试图通过故意在后台工作线程中引入各种错误来重现这个问题,但我做不到。什么会导致线程和应用程序像这样继续运行,即使在主窗口关闭后(并且可能已调用PostQuitMessage)?如何确保应用程序始终正常关闭? 最佳答案 第一条规则是线程的主执行

c# - 如何从 C# 系统托盘应用程序将 C 程序作为线程运行?

我有一个C控制台应用程序,它曾经在Windows的CMD终端中的前台运行,并接受用户击键输入。但是,现在需要将其移至后台并且不需要用户输入。我已经创建了一个系统托盘,它是通过右键单击退出和右键单击关于来正确实现的。并有一个执行该功能的终端程序。我不想再次重写程序,而是希望能够创建一个线程来调用我现有程序中不需要终端的函数。只是为了强调这一点,控制台交互方面已从代码中删除,应用程序对击键的响应等也已从代码中删除。希望这能稍微澄清一些事情。问题:这可能吗?我将如何实现?(我通常不是使用更多嵌入式C的PC程序员,所以.NET对我来说很陌生。非常感谢任何帮助) 最佳

c++ - 发现在我的 C++ 应用程序中创建线程的原因及其作用的最佳方法是什么?

我正在审核在Windows上运行的C++应用程序,该应用程序是针对多线程调试DLL编译的。它有很多可以产生线程的第三方依赖项。我需要跟踪每个线程存在的原因以及它分配了多少堆栈空间。有什么好方法可以追溯到线程创建的开始,以便我可以看到线程的生成位置?更新:我应该指出,我有整个应用程序的源代码,不依赖于Microsoft依赖项。然而,许多线程的调用堆栈仅存在于操作系统附带的库中,例如ntdll.dll和kernel32.dll。 最佳答案 您可以使用WindowsPerformanceToolkit查看ThreadCreate事件。在V

c++ - Windows 操作系统中的线程安全和原子读取

我的应用程序中有这段代码。我怀疑它不是线程安全的,因此决定询问SOers。int*volatileint_ptr;intcount;线程1:voidgrow(intnew_count){if(new_count线程2:intget_value(intindex){returnint_ptr[index];}我知道可以使用CRITICAL_SECTION,但线程1可能一周运行一次,而线程2一天运行数百万次。在99.99999%的访问int_ptr的尝试中,第二个线程将白白进入和退出临界区。这对我来说没有意义。该应用程序只能在Windows2000和更高版本的Intel处理器(显然是多核处

c - 挂起和恢复线程(Windows,C)

我目前正在开发一个高度多线程的应用程序,处理大量要处理的小数据。问题在于产生了太多线程,这大大降低了系统速度。为了避免这种情况,我有一个Handles表,它限制了并发线程的数量。然后,我“WaitForMultipleObjects”,当一个插槽被释放时,我创建了一个新线程,该线程具有自己的数据批处理。现在,我有尽可能多的线程(通常每个内核一个)。即使那样,由多线程引起的负载也是非常明智的。这样做的原因是:数据批处理很小,所以我一直在创建新线程。我当前实现的第一个想法只是将作业重新组合为更长的序列表。因此,当我创建一个新线程时,在终止之前它将有128或512个数据批处理。它运作良好,但

windows - 为什么它像没有线程一样运行?

我正在编写一个脚本来ping我的ip范围。这是我到目前为止所拥有的:lines=`ipconfig`.split("\n")thr=[]ip_line=lines.detect{|l|l=~/IpAddress/i}matcher=/\d+\.\d+\.\d+\.\d+/.match(ip_line)ifmatcher.length>0address=matcher[0]address.sub!(/\.\d+$/,"")(1..254).eachdo|i|xaddr=address+"."+i.to_sputs"pinging#{xaddr}"thr问题是,这执行起来非常慢。就像应用程

c# - 是否可以启动相同的线程?

我有一些计算程序。现在,这个程序是单线程的,我需要增强它以使其成为多线程。一般来说,程序计算,热电路的动态演化(一些配置类型的不同涉及元素(管,泵,active区及其连接),对于每个时间步长程序计算扩散方程(http://en.wikipedia.org/wiki/Diffusion_equation))问题是,在每个时间步上,每个涉及的元素都可以单独处理,但在每个新的时间步上,所有元素都应该相互同步。我决定通过从每个时间步开始每个元素一个线程来解决它。privatevoidSolveElementDynamic(objectelement){if(elementisPJunction

深大计算机网络实验五——交换机与VLAN的基本配置

目录实验内容实验步骤任务1.VLAN基本配置任务2:Trunk命令实验内容1)获取华为QuidwayS系列交换机的使用手册等资料2)通过Console方式登录QuidwayS系列交换机,并熟悉交换机各种视图及其视图之间的切换。3)配置交换机端口参数,了解相关命令的使用方法4)进行VLAN配置,了解VLAN配置命令使用方法。5)实验验证,提交实验报告。实验步骤任务1.VLAN基本配置      首先交换机和主机需要进行连接,将主机1和主机2连接在交换机的网口当中,网口是有很多个的,此次实验我将网口接在了3号和四号口上面,并将主机1的串口连接上了交换机,交换机的窗口标识是console。     

蓝桥杯算法竞赛系列第六章——蓝桥必备篇之模拟、思维

欢迎回到:遇见蓝桥遇见你,不负代码不负卿!目录一、简单模拟栗子:换酒问题栗子:按奇偶排序数组栗子:害死人不偿命的(3n+1)猜想栗子:挖掘机技术哪家强二、查找元素栗子:找x三、图形输出栗子:跟奥巴马一起编程四、日期处理栗子:日期差值五、进制转换栗子:D进制的A+B六、字符串处理栗子:回文串栗子:说反话七、蓝桥结语:遇见蓝桥遇见你,不负代码不负卿!【前言】之前有铁汁要求将入门部分也更新一下,比如简单模拟,简单数学部分,这两块在蓝桥杯中考的都不难,但是特别重要,就像我们高考的时候数学试题那前五道选择题,前两道填空题一样,属于送分题,但是对于马虎的同学是致命的,所以要上心哦,这部分内容没有涉及算法,