
日常小功能
文章平均质量分 80
wangx_x
...
展开
-
qt/cpp程序实现跨线程/进程异步调用(QMetaObject/QT RemoteObject)
文章目录简介线程调用函数原型简单示例进程调用静态Replica动态Replica简介QT Remote Object(QT RO)进程通信/远端调用功能非常方便,通过qt封装好的异步调用策略能很灵活的实现程序中的各种功能,一般在进程间通信中应用广泛,实现方式和qt的MetaObject异步调用方式有一定的相似性,因此放到一起做一些简单总结和记录。线程调用QT中的QMetaObject提供了一种很便捷的异步调用方式,一般情况我们执行比较耗时的操作又不想阻塞程序的一些既定功能时,使用 QMetaObje原创 2022-05-22 14:18:40 · 3755 阅读 · 0 评论 -
C++ 结构体(struct)的继承
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!!有很多人应该已经知道这样一个事实,但总有些不知道的人,看到这些会感到很惊讶。是的,当我第一次注意到这个事实的时候,我也同样很吃惊。既然这些它都能实现,那它和class还能有什么区别?最本质的一个区别就是默认的访问控制,体现在两个方面:1)默认的继承访问权限。struct转载 2022-02-10 23:53:02 · 19470 阅读 · 5 评论 -
C++ SFINAE简介和std::enable_if_t的简单使用
最近整理代码时发现了有人常会使用std::enable_if_t,据说这个是C++14才支持的写法,因此再次勾起了我的整理欲。但要是熟悉std::enable_if的话其实也没啥太大难度,自认为这种使用方式主要提供了一种通过模板偏特化来实现的类型筛选机制,某些情况下在设计复杂工程的泛化处理时能提供一些方便。但能力有限,目前我还没有发现哪些非常典型的使用场景能大幅提升性能。不过整理之前感觉有必要先引入一个很重要的概念:SFINAE,这是英文Substitution failure is not an err原创 2022-02-10 23:16:48 · 11222 阅读 · 0 评论 -
c++ 11中异步操作与锁的简单学习(lock_guard、unique_lock、condition_variable、recursive_mutex)
在多线程操作中,锁用来保证数据的一致性访问,即各个线程有条不紊的使用某些数据,避免同时操作或同时取值导致出现问题。多线程本来就是为了提高效率和响应速度,但锁的使用又限制了多线程的并行执行,这会降低效率,因此设计合理的锁能保证程序效率。lock_guardlock_guard是一个互斥量包装程序,它提供了一种方便的RAII(Resource acquisition isinitialization )风格的机制来在作用域块的持续时间内拥有一个互斥量。创建lock_guard对象时,它将尝试获.原创 2022-01-08 02:37:43 · 1916 阅读 · 0 评论 -
线程池原理的简单学习总结
最近项目遇到一些简单的线程管理问题,遂研究学习了一下线程池的管理原理。个人感觉基本思想在于调度开销相对小的线程时,避免创建线程和销毁线程所带来的消耗,或者理解为先创建线程,并维护一个管理函数模板的队列,反复使用已创建的线程来消耗队列中的函数操作,从而实现避免反复创建和销毁线程的消耗。首先感谢github上大神的分享:https://github.com/progschj/ThreadPool对于应用C++ 11中的某些特性,简要整理了一些相关知识:可变模版参数std::bind基本用法和总结对于锁原创 2022-01-08 01:13:29 · 143 阅读 · 0 评论 -
std::bind基本用法和总结
C++11中提供了std::bind。bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。bind的思想实际上是一种延迟计算的思想,将可调用对象保存起来,然后在需要的时候再调用。而且这种绑定是非常灵活的,不论是普通函数、函数对象、还是成员函数都可以绑定,而且其参数可以支持占位符。std::bind函数常用大约有两种函数原型,定义如下:template< class F, class... Args >/*unspecified*/ bind( F&&am原创 2022-01-07 23:30:50 · 1400 阅读 · 0 评论 -
以调用外部应用(以CMD为例)时是否隐藏黑窗口为例初步了解重定向与匿名管道
实现方法一、使用 _popen()和_pclose()方法 char buf[1024]; string strCmd="ping 192.168.1.1"; FILE *Pipe = NULL; if ((Pipe = _popen(strCmd.c_str(), "r")) == NULL) { return ""; } string strResult; w...原创 2020-03-05 23:44:29 · 788 阅读 · 0 评论 -
MFC显示窗口时关于GetWindowRect()、GetClientRect()、ClientToScreen()和SetWindowPos()等方法的一些Tips
网上看了一些资料,对于MFC显示位置坐标等说明文档主要是讨论GetWindowRect()与GetClientRect(),由于最近修改公司项目上的一些小问题是遇到相关内容,因此记录一下便于以后查找。感觉网友们形容的已经很详细了,所以在这参考一些MSDN上的说明和网友博客中的一些内容,并小小的测试几个细节问题。对于GetWindowRect()解释在MSDN上写的非常明白:This fu...原创 2020-01-07 00:15:52 · 2347 阅读 · 0 评论 -
CFile::Open的一些使用说明
CFIIE类是MFC的文件类的基类,它直接提供无缓冲的二进制磁盘I/O设备,并且通过它的派生类可以提供对text文件和内存文件的存取。CFILE与CArchive类一起提供对MFC序列化的支持。CFILE类和它的派生类之间的等级关系,允许你的程序通过多态的CFILE界面对所有文件类进行操作。比如内存文件,或者磁盘文件以及类似的。CFILE和它的派生类用于执行一般的磁盘I/O操作。而OFSTRE...转载 2019-09-25 21:50:11 · 4534 阅读 · 0 评论 -
ShellExecute、ShellExecuteEx和SHELLEXECUTEINFO 的使用
1、首先是SHELLEXECUTEINFO结构体的说明:在MSDN中:Contains information used byShellExecuteEx.typedef struct _SHELLEXECUTEINFOA { DWORD cbSize; ULONG fMask; HWND hwnd; LPCSTR lpVerb; ...原创 2019-09-25 21:32:51 · 1917 阅读 · 0 评论 -
在windows下C++使用Native wifi API获取SSID和连接信息
在linux下获取当前连接的信息很是轻松的,但是在windows下相对比较复杂,虽然可以考虑使用cmd命令获取网卡的信息并分析出当前连接的SSID,但是对于网络环境比较复杂的情况下其实我们同样可以使用Native wifi API获取目前的连接信息。原理是通过打开网卡设备获取其连接信息,并提供给我们的程序使用。在此对网上的一些资料做了一些整理和总结。一、首先是我们所需要的结构体:ty...原创 2019-09-23 20:58:37 · 6563 阅读 · 2 评论 -
C++添加防火墙例外——检测目标程序不在例外列表时才进行添加,防止重复添加
程序常通过网络进行通信,有时某些通信端口会被防火墙阻止导致程通信异常,一般情况要关闭防火墙或配置白名单比较麻烦。每次启动通过cmd命令添加防火墙例外可能造成程序经常使用从而多次重复添加同一规则,或程序考到磁盘的不同位置还要重新添加例外规则等。楼主比较懒所以写个简单demo,先查询防火墙,如果白名单中没有目标程序则将其名称和路径添加到例外规则中,如果目标程序已经存在于防火墙例外规则中则直接返回防止重...原创 2019-08-21 22:07:10 · 1350 阅读 · 0 评论