- 博客(158)
- 资源 (1)
- 收藏
- 关注
原创 arm-none-linux-gnueabi交叉工具链执行后显示: no such file or directory
【代码】arm-none-linux-gnueabi交叉工具链执行后显示: no such file or directory。
2024-01-16 15:29:39
567
1
原创 C++11引入的原始字符串字面量与普通字符串字面量的区别
在C++中,R"(C:\temp\my_file.ext)"和"C:\temp\my_file.ext"之间有一个重要的区别。因此,R"(C:\temp\my_file.ext)"和"C:\temp\my_file.ext"的主要区别在于,前者是。在处理文件路径时,使用原始字符串字面量可以避免处理转义字符的麻烦。原始字符串字面量,不会对反斜杠进行转义。
2023-11-15 18:06:55
306
原创 qt pro里面添加图标
被调用后,程序会进入一个循环,这个循环会不断地接收并处理各种用户界面事件,直到没有更多的事件需要处理。在Qt中,所有的用户界面交互,比如点击鼠标、键盘输入等,都是由事件驱动的。当这些事件发生时,Qt会生成相应的事件,然后传递给应用程序去处理。是 Qt 框架中的一个类,用于处理应用程序级别的操作,例如处理命令行参数、设置应用程序风格等。对象之后,可以创建并操作各种 Qt 控件,例如按钮、文本框等,以构建用户界面。的作用就是启动Qt的事件循环,让程序开始接收并处理用户界面事件。所以,在你给出的代码中,
2023-10-20 10:22:34
158
原创 move old_folder/ new_folder和 move old_folder new_folder
对于你提到的两个命令,mv old_folder/ new_folder和mv old_folder new_folder,它们实际上是不同的。mv old_folder/ new_folder:这个命令将在当前目录下将名为"old_folder"的文件夹移动到名为"new_folder"的文件夹中。如果"new_folder"不存在,那么它将被创建。mv old_folder new_folder:这个命令将在当前目录下将名为"old_folder"的文件夹重命名为"new_folder"。
2023-09-07 16:39:36
138
原创 大端和小端模式
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,存储模式将地址的高低和数据位权有效地结合起来。大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,存储模式类似把数据当作字符串顺序处理。windows是小端模式。
2023-09-06 13:22:58
237
原创 sourceinsight使用教程
原文链接:【代码阅读软件】Source Insight 4 使用教程 | 很详细——适合新手_sourceinsight文件窗口_wkd_007的博客-优快云博客
2023-09-01 16:45:39
168
原创 类模板的静态成员不是每个对象拥有一份 //也不是类模板拥有一份,而是由类模板实例化出的每一个真正的类各有一份,且为该实例化定义 的所有对象共享
【代码】类模板的静态成员不是每个对象拥有一份 //也不是类模板拥有一份,而是由类模板实例化出的每一个真正的类各有一份,且为该实例化定义 的所有对象共享。
2023-08-19 15:28:11
78
原创 在程序中如何判断该线程的线程id(get_id())的返回值是一个无效值
可以通过 `std::thread::id` 的成员函数 `std::thread::id::operator==()` 来判断一个 `std::thread::id` 是否是一个空值。如果一个 `std::thread::id` 对象与默认构造的 `std::thread::id` 对象相等,那么该 `std::thread::id` 对象就是一个空值。`std::thread::id()` 是`std::thread::id`的默认构造函数,它会创建一个空的`std::thread::id`对象。
2023-08-06 16:26:42
325
原创 stdexcept和exception,两个头文件的区别?
2. 异常处理:stdexcept中定义了一些标准异常类,例如logic_error和runtime_error等,它们是由用户定义的异常类继承而来的。而exception是一个基本的异常类,通常用户可以继承exception来定义自己的异常类。而exception中的异常类型可以是任何用户自定义的类型,用户可以根据自己的需要定义异常类型。4. 继承关系:stdexcept中的异常类是按照继承关系组织起来的,所有的标准异常类都继承自exception类。
2023-08-06 15:33:29
353
原创 如何理解线程可以共享地址空间?
这种共享的地址空间可以方便地在多个线程之间共享数据,但同时也需要小心处理并发问题,如竞态条件和数据竞争。为了确保线程安全,必须使用同步机制(如互斥锁、条件变量等)来保护共享的数据,以防止多个线程同时修改同一个内存地址而导致不可预测的结果.在C++中,线程共享地址空间是指在多线程编程中,所有线程都可以访问相同的内存地址。因此,一个线程对内存的修改可能会影响其他线程对相同内存的访问。
2023-07-25 15:09:03
429
原创 关于计算机中的“race condition“的解释
竞争条件(race condition)是指当多个线程或进程同时访问或修改共享资源时,最终的执行结果受到每个线程执行的顺序或时间差异的影响,从而导致程序出现不正确的行为或结果。这种情况下,各个线程之间的执行顺序是不确定的,无法可靠地预测各个操作的完成顺序。因此,出现竞争条件时,程序的行为可能与单线程下的预期结果不一致。"竞争条件"这个词可以被翻译为"race condition",但为了更好理解,可以使用 "并发冲突" 这个词组。
2023-07-18 19:15:05
247
原创 线程独占数据和共享的数据有哪些?
需要注意的是,线程间共享的数据需要进行同步操作,以保证数据的一致性和正确性,否则可能会发生竞争条件导致数据错误或者不可预料的结果。同时,在设计和开发多线程应用时,需要谨慎处理共享数据和私有数据的访问和修改,以避免引发线程安全问题。4. 栈帧:每个线程的函数调用时会生成一个栈帧,用于存储函数的参数、返回地址等信息。2. 栈空间:每个线程都有自己独立的栈空间,存储函数调用时的参数、局部变量等信息。3. 寄存器:每个线程都有自己独立的寄存器,用于存储临时变量和计算结果等。
2023-07-18 19:06:33
1964
原创 C++并发编程之共享数据(二)
恶性条件竞争通常发生于完成对多于一个的数据块的修改。例如对一个双向链表的结点的修改。该节点有两个指针。避免条件竞争的两种方式:方式一:确保只有进行修改的线程才能看到不变量被破坏时的中间状态。从其他访问线程的角度来看,修改不是已经完成了,就是还没开始。方式二:对数据结构和不变量的设计进行修改,修改完的结构必须能完成一系列不可分割的变化,也就是保证每个不变量保持稳定的状态,这就是所谓的无锁编程。
2023-07-15 17:32:48
587
原创 变量生命符thread_local
thread_local是c++11为引进的变量声明符。是一个所谓存储器指定符,其作用类似命名空间,指定了变量名的存储期以及链接方式。staticexternmutable:对象的存储在线程开始时分配,而在线程结束时解分配。每个线程拥有其自身的对象实例。唯有声明为 thread_local 的对象拥有此存储期。thread_local 能与 static 或一同出现,以调整链接。打印结果:每个线程都拷贝了一份两个线程共享一个全局变量,最终结果打印为101;
2023-07-15 17:31:47
220
原创 C++并发编程之线程启动(一)
不过,t1已经有了一个关联 的线程(执行some_other_function的线程),所以这里系统直接调用 std::terminate() 终止程 序继续运行。调用join的行为还清理了线程相关的存储部分,std::thread 对象将不再与已经完成的线程有任何关联,join只能调用一次。解释一下位置9的代码:计算剩下的最后一个块的结果,由于数据大小可能不是最小任务数的整数倍,所以最后一个块的元素个数不一定是多少,但是不影响该算法的执行。,那么转移的时候就需要使用 std::move() 进行。
2023-07-15 11:50:33
473
原创 函数后加const的作用
表示函数不可以修改类中的成员!相当于这个函数是一个只读函数!一旦我们想要改变类成员的值便会报错!1、提高了代码的可读性,别人看到你这个就知道你这个函数没有改变类成员。首先要明确一点,函数后面加const只能是类的。2、提高代码的可靠性,若想改变改变则会报错。,普通函数是无法加const的。
2023-07-15 10:01:41
440
原创 noexcept关键字解析
使用noexcept表明函数或操作不会发生异常。如果noexcept函数向外抛出了异常,程序会直接终止,该函数内部会调用std::abort()终止程序。
2023-07-15 09:50:44
353
原创 std::string const&str与const std::string& str的区别
声明了一个对非常量对象的引用,但是这个引用是一个常量,不能通过这个引用修改非常量对象,但是可以通过其他方式修改这个非常量对象的值。声明了一个对常量std::string对象的引用,也就是该引用是对一个const对象的引用。
2023-07-14 17:51:43
1275
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人