- 博客(33)
- 资源 (10)
- 收藏
- 关注
转载 cpu time和clock time、real time、wall time都是什么?以及在不同语言中如何计算?
Wall time(也称为 clock time 或 real time)和 Real time 意义相同,都是指程序从开始执行到结束所花费的时间,包括了 CPU 时间和与 CPU 时间无关的时间。Real time(也称为 wall time 或 clock time)指的是从开始执行程序到程序完成所花费的时间,包括了 CPU 时间和与 CPU 时间无关的时间。• User CPU time:指的是程序在用户模式下执行时花费的 CPU 时间,也就是在执行应用程序的代码时所花费的时间。
2024-07-09 10:43:27 114
原创 信号量完成线程间的互斥与同步
虽然信号量和锁都可以用于实现多线程或多进程的同步,但它们在应用场景和实现机制上有所不同,因此在某些情况下可能需要同时使用信号量和锁来实现更复杂的同步需求。锁和信号量作为两种常见的同步机制,各有优缺点,在不同的场景下有着不同的应用。死锁检测和优化: 一些锁的实现(例如互斥锁)可能具有死锁检测和优化的功能,可以帮助程序员及时发现和解决潜在的死锁问题。更高效的实现: 锁的实现通常比信号量更加高效,因为它只需要维护一个布尔值或整数来表示锁的状态,而信号量可能需要维护更多的状态信息。锁通常只允许一个线程进入临界区;
2024-05-31 17:14:10 882
原创 动态参数在宏中的使用
这些宏,这些宏是在本函数的堆栈上进行指针操作,而我们在 调用StringCchPrintf的时候,可变参数部分传入的是args,前面也说了,args其实类型是char *,就是一个地址,根本代表不了那一堆可变参数。自然出错了,没crash就不错了。va_list就是一个char *,va_start是一个宏,它的作用就是将args这个参数设置成format参数地址+format参数的字节数 – 说白一些就是,将args设置成函数栈中format以后的位置上,这样args就指向了可变参数的开头。
2024-05-14 18:13:00 484
转载 Fast DDS之Discovery
当EDP开始时,每个参与者都会公布其读者和写者的信息(包括主题和数据类型),并接收其他参与者的读者和写者的信息。然后,EDP会比较这些信息,如果一个写者的主题和数据类型与一个读者的主题和数据类型相匹配,那么这个写者和读者就会被匹配起来,它们就可以进行数据通信。这种服务模式中,一个或多个DomainParticipants作为server,所有的其他节点作为client,向server注册信息,并从server获取其他节点的信息。在Fast DDS中,读者和写者是通信的端点,他们通过主题和数据类型进行交互。
2024-05-14 16:23:31 80
转载 Fast DDS之Entity
所有的实体都定义了抽象的listener接口,包含entity的status改变后的回调函数。每个实体对象都会关联一组Status对象,这些状态值代表了entity的通信状态,如收到新的数据,发现一个新的participants或一个远端端点丢失等。前缀通常用于标识特定的参与者(Participant),而实体ID用于标识特定的参与者下的实体,例如发布者(Publisher)、订阅者(Subscriber)、主题(Topic)等。实体的概念表示,这个对象支持Qos,有listener,有statuses。
2024-05-14 16:10:08 48
转载 FastDDS中的log的使用方法
配置log输出内容注册Comsumers设置log级别重置配置XML配置过滤重置log过滤Comsumers禁用log代码log# 如:123这三个宏带两个参数,category 和具体的log字符串,如下:123。
2024-05-14 15:58:20 98
转载 程序性能优化
因此,在追求高效代码的过程中,我们需要不断追求卓越的设计和深刻的理解,以确保我们的程序不仅运行高效,而且具有良好的可维护性和可扩展性。正如哲学家亨利·戴维·梭罗在《瓦尔登湖》中所说:“细节是造成美丽的源泉”,在软件开发的世界里,对缓存的理解和优化,就是那些决定程序性能优雅与否的细节。在编程世界中,数据结构的设计和选择对程序的性能有着深远的影响。正如计算机科学家和心理学家Donald Knuth所指出,“在编程中,我们不能忽视数据结构的重要性,因为数据结构不仅是计算机的骨架,也是我们思考问题的方式。
2024-04-24 18:34:17 65
转载 简单内存池实现
也就是说,我把elem这块内存的内容删除了,然后把这块地址分成若干4字节(32位系统下)的连续块,把pHead指向的第一个空闲地址块的地址放倒这块抵制块的第一个4字节中保存,然后pHead = elem;若pHead不指向NULL,则说明已经有申请好的内存(可能是某个对象析构之后,留下来,没有返还给系统的),取到pHead指向的第一块空闲内存块的地址,然后然pHead指向这块空闲地址质指向的空闲地址块(即 pHead = *(reinterpret_cast<T**>(pHead));但是其实质是相同的。
2024-04-15 17:53:41 27
原创 std::is_invocable是C++17
具体来说,is_invocable模板接受一个函数类型和一组参数类型作为模板参数,并提供一个名为value的静态成员常量,用于表示给定的函数类型是否可以被调用。如果value为true,则表示给定的函数类型可以被调用,否则表示不可调用。std::is_invocable是C++17中引入的一个类型特性模板,用于判断给定的函数类型是否可以被调用。
2024-03-07 18:53:18 559 1
原创 数组“之”字打印,状态机做法
状态机的转换主要用于处理下一步的走法,这一个题目的复杂点只能是逐步走,不能上来就确定8位置是怎么走,没有动态规划的特征。到6点newState = down, column=0, 无法--,只能向下走,column不变,row++;到1点 nextState = leftdown, 左下方向,row++,column--;比如0是起点:下一步向右,nextState=Right, column++;按照这个规率找到各个状态机之间的切换原理,就可以解决这个题目,
2024-02-03 15:36:13 342 1
原创 之字打印c++
/ 最后一列横坐标加1。// 最后一列纵坐标加1。int x1 = 0;//(x1,y1)横向走的坐标 (x2,y2)纵向走的坐标。
2024-02-02 02:07:48 381
原创 cmake 之 ExternalProject_Add 引入本地文件
CONFIGURE_COMMAND:执行cmake文件的指令,类似平常的"cmake …INSTALL_COMMAND:等效于手动输入"make install"BINARY_DIR:输出目前的目录,也就是平常使用的build目录。DOWNLOAD_DIR:存放下载文件的路径。SOURCE_DIR:存入编译源文件的路径。URL:代码外部依赖的路径。
2023-12-02 15:56:23 638
原创 epoll demo
如果返回 EAGAIN,把 socket 加入 epoll,在 epoll 的驱动下写数据,全部数据发送完毕后,再出 epoll。这种方式的缺点是,即使发送很少的数据,也要把 socket 加入 epoll,写完后在移出 epoll,有一定操作代价。使用Linux epoll模型,水平触发模式;epoll 只会通知一次,accept 只处理一个连接,导致 TCP 就绪队列中剩下的连接都得不到处理。考虑这种情况:多个连接同时到达,服务器的 TCP 就绪队列瞬间积累多个就绪连接,由于是边缘触发模式,
2023-07-05 09:16:34 121 1
原创 IP头中TTL字段的作用
3,TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。4,如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。1,TTL的作用是限制IP数据包在计算机网络中的存在的时间。2, 虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。
2023-05-12 14:40:04 911
原创 单向链表的N*log(N)的原址排序
#include <cstdint>#include <algorithm>#include <unistd.h>#include <stdio.h>struct node{ int value; node *next; node(int v) : value(v), next(nullptr){}};node *Partion(node *begin, node *end){ if (begin == n.
2022-02-28 09:10:03 228
原创 c++11 函数的引用限定符(reference qualifiers)
在C++11的新特性中,关于左值/右值的对象调用函数,有了一些新的变化。如下面的代码:class Widget {public: void doWork() & //只有*this为左值的时候才能被调用 { std::cout << "left value call" << std::endl; } void doWork() && //只有*this为右值的时候才能被调用 { std::
2022-02-11 17:25:13 586
原创 LRU 缓存的实现
LRU缓存的实现有以下几个着重点:1.缓存大小2.被用的对象排到头3.查询效率的问题。最久未使用的对象被移除,即是在Put新对象时,size > capacity时,需要删除list尾部的数据,同时删除cache_中,并且把Put的对象放在list的头部为了提高查询效率用map存放一个key值,只有当find的时候,效率高一点。下面是简单的实现代码:#pragma once#include <iostream>#include <map&g
2021-11-04 19:57:41 386
原创 关于go语言中range值拷贝理解
package mainimport ( "fmt")func test_range_val_copy() { a := []int{1, 2, 3, 4} // 下面使用的v是一个临时变量 // 相当于 var v int // 这时临时变理v的地址是固定下来了,每次v的值在变,但是&v的地址是不变的 // 最后&v会...
2020-03-15 11:41:04 1220
原创 linux内核copy_process
/* * This creates a new process as a copy of the old one, * but does not actually start it yet. * * It copies the registers, and all the appropriate * parts of the process environment (as per t...
2020-03-10 21:55:53 415
原创 linux内核中如何通过pid得到 struct pid
struct pid *find_pid_ns(int nr, struct pid_namespace *ns)用于从namespace 下的pid找到对应的pid结构体,位置:/linux/kernel/pid.c声明:struct pid * find_pid_ns(int nr struct pid_namespace * ns );功能:此函数用于获取进程描述符,此进程应该满...
2020-03-10 21:10:13 1213
转载 Poco数据库操作用户手册(一)
一个简单的例子POCO Data提供了一个抽象的数据层,以供用户方便的与不同的数据库交互,以下是一个完整的实例:[code]#include "Poco/Data/Common.h"#include "Poco/Data/SQLite/Connector.h"#include using namespace Poco::Data;vo
2015-09-11 21:16:53 1360
转载 POCO: 类型和字节序
固定长度的整型,字节序转换,以及Any/DynamicAny类型固定长度整型Poco定义了一些固定长度的整型:#include "Poco/Types.h"(Poco/Foundation.h自动包含了以上文件)Poco::Int8, Poco::Int16, Poco::Int32, Poco::Int64Poco::UInt8, Poco::
2015-09-11 21:11:25 686
转载 Poco数据库操作用户手册(二)
记录集(RecordSet)Poco::Data::RecordSet类提供了一个通用的方法与数据库的表进行交互,你可以使用RecordSet进行:a. 遍历数据表中所有的行与列b. 获取各列的元信息,比如名称,类型,长度等.使用RecordSet,需要先创建一个Statement并执行他,从Statement创建一个RecordSet,如下:Stateme
2015-09-11 21:09:16 655
转载 Poco数据库操作用户手册(一)
一个简单的例子POCO Data提供了一个抽象的数据层,以供用户方便的与不同的数据库交互,以下是一个完整的实例:[code]#include "Poco/Data/Common.h"#include "Poco/Data/SQLite/Connector.h"#include using namespace Poco::Data;vo
2015-09-11 21:06:28 569
vc显示行号文件及使用说明
2011-01-03
最新的腾讯面试题,一起分享
2010-09-29
Install shield api中文版
2010-05-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人