<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Crystal_lpx的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Crystal_lpx</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Crystal_lpx]]></copyright><item><title><![CDATA[MFC ListCtrl 控件列排序结果不正常]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/151403412</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/151403412</guid><author>Crystal_lpx</author><pubDate>Wed, 10 Sep 2025 14:57:45 +0800</pubDate><description><![CDATA[后面重新通过deepseek写了个排序的进行测试，发现没有问题，对比后发现差异是排序接口不一致，排序接口。写了个小工具，对ListCtrl控件的列进行排序，点击列名后，出现排序结果不正常！通常更受欢迎，因为它不需要复杂的数据管理，代码更加直观。以上，按照“备注“ 列进行排序，结果不正确。绑定关系使用的是使用。]]></description><category></category></item><item><title><![CDATA[C++ 并发编程指南（3）线程安全]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142986858</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142986858</guid><author>Crystal_lpx</author><pubDate>Wed, 16 Oct 2024 17:10:07 +0800</pubDate><description><![CDATA[解释一线程安全是指代码在多线程环境下运行时的安全性。如果一个类或者函数在多线程环境中被安全地调用，且其内部状态和结果不会因为多线程的并发访问而遭到破坏，那么我们就说这个类或者函数是线程安全的，一句话讲就是多线程可以安全访问临界区资源，就是线程安全。解释二多线程同时对内存中的一共享变量操作，最终这个共享变量的值是正确的，那么就是线程安全，反之就是线程不安全。]]></description><category></category></item><item><title><![CDATA[C++ 并发编程指南（2）管理线程]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142986491</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142986491</guid><author>Crystal_lpx</author><pubDate>Wed, 16 Oct 2024 17:07:13 +0800</pubDate><description><![CDATA[转载：https://blog.youkuaiyun.com/cloud323/article/details/135577408。]]></description><category></category></item><item><title><![CDATA[【转载】C++ 并发编程指南（1）探索并发世界]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142984338</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142984338</guid><author>Crystal_lpx</author><pubDate>Wed, 16 Oct 2024 16:50:57 +0800</pubDate><description><![CDATA[转载：https://blog.youkuaiyun.com/cloud323/article/details/135575768。]]></description><category></category></item><item><title><![CDATA[【转载】C++ 并发编程指南（4）线程同步]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142984971</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/142984971</guid><author>Crystal_lpx</author><pubDate>Wed, 16 Oct 2024 16:17:29 +0800</pubDate><description><![CDATA[线程同步是指在多线程环境下，通过协调和控制线程的执行顺序和访问共享资源的方式，确保线程之间能够按照一定的顺序合作和共享资源，以避免竞争条件和数据不一致的问题。即：当有一个线程在对内存进行操作时，其他线程都不可以对这个内存地址进行操作，直到该线程完成操作。其他线程处于等待状态，直到第一个线程完成操作并释放资源后，它们才能继续执行。在C++中，可以使用信号量（semaphore）来实现线程同步。信号量是一种用于控制多个线程对共享资源的访问的同步原语。]]></description><category></category></item><item><title><![CDATA[Android签名漏洞]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135482168</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135482168</guid><author>Crystal_lpx</author><pubDate>Tue, 09 Jan 2024 15:38:26 +0800</pubDate><description><![CDATA[Android证书签名漏洞，是指攻击者可以在不改变原APK的签名情况下修改APK的代码，从而绕过Android的签名认证安全机制。通过植入恶意代码的到仿冒的App中，就可替代原有的App做下载、更新。正常情况下，开发者发布了一个应用，该应用一定需要开发者使用他的私钥对其进行签名。恶意攻击者如果尝试修改了这个应用中的任何一个文件（包括代码和资源等），那么他就必须对APK进行重新签名，否则修改过的应用是无法安装到任何Android设备上的。]]></description><category></category></item><item><title><![CDATA[Native Crash回溯栈]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135480740</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135480740</guid><author>Crystal_lpx</author><pubDate>Tue, 09 Jan 2024 15:02:42 +0800</pubDate><description><![CDATA[每个地址会的解析信息会保存在Dl_info中，如果有运行符号满足，dli_sname和dli_saddr就会被设定为相应的so名称跟地址，dli_fbase是基址信息，因为我们的so库被加载到程序的位置是不固定的！unwindCallback这里拿到了系统回调给我们的参数，关键就是这个了 _Unwind_Context这个结构体参数了，这个参数的作用就是传递给_Unwind_GetIP这个函数，获取我们当前的执行地址，即pc值！所返回的信息包括函数的基地址、链接器加载的共享库的名称以及函数名。]]></description><category></category></item><item><title><![CDATA[Linux信号处理浅析]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135480606</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135480606</guid><author>Crystal_lpx</author><pubDate>Tue, 09 Jan 2024 14:53:50 +0800</pubDate><description><![CDATA[信号集就是用来记录当前收到了哪个信号，会把当前信号的标志位置成“正在处理”，如果此时再收到该信号，那么信号就阻塞等待，使用数据类型sigset_t表示信号集，在Linux中该类型是一个32位无符号整数，这是因为在Linux中定义了32种信号，每一个信号用32位无符号整型变量中的一位来标志，如果该位置为1，那么表示正在处理该信号，如果置为0表示可以处理该信号。以第四行为例，阻塞信号为0，该信号没有被阻塞，未决信号为1，说明收到这个信号了，对应的处理方式是 sighandler函数，那就会执行该函数。]]></description><category></category></item><item><title><![CDATA[Google Breakpad使用方法]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135480407</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/135480407</guid><author>Crystal_lpx</author><pubDate>Tue, 09 Jan 2024 14:52:51 +0800</pubDate><description><![CDATA[依赖头文件下载地址：Breakpad由三个主要组件：client 是一个库, 以library的形式内置在应用中，在应用崩溃时写入一个minidump文件symbol dumper 是一个程序，读取由编译器产生的调试信息（debugging information），并生成一个使用Breakpad格式的符号文件( symbol file)processor 是一个程序,读取 minidump文件 和 symbol file,生成可读的c/c++ 堆栈跟踪(Stack trace.)]]></description><category></category></item><item><title><![CDATA[gitlab cicd]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/130596708</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/130596708</guid><author>Crystal_lpx</author><pubDate>Thu, 11 May 2023 14:57:04 +0800</pubDate><description><![CDATA[CICD是指持续集成和部署]]></description><category></category></item><item><title><![CDATA[Base64加解密]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/128990381</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/128990381</guid><author>Crystal_lpx</author><pubDate>Sat, 11 Feb 2023 23:03:07 +0800</pubDate><description><![CDATA[已验证可用]]></description><category></category></item><item><title><![CDATA[CEF 测试demo编译和调试]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113878717</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113878717</guid><author>Crystal_lpx</author><pubDate>Sat, 20 Feb 2021 11:18:19 +0800</pubDate><description><![CDATA[背景
CEF 32位和64位已经编译完成，现在开始编译官方Demo工程

编译环境
VS2019
CMake 3.17
编译步骤
1. 解压cef_binary_88.0.0-master.2288+gd06fdcf+chromium-88.0.4324.0_windows32.zip
2. 解压目录下创建文件夹vs2019

3. CMake生成VS工程，如下，有不清楚的可以找度娘


4. VS2019打开工程

5. 修改工程配置，没有使用沙箱，去掉Debug和Release所有工程中相关配置。

工]]></description><category></category></item><item><title><![CDATA[CEF MFC程序编译错误处理]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113517856</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113517856</guid><author>Crystal_lpx</author><pubDate>Mon, 01 Feb 2021 15:01:57 +0800</pubDate><description><![CDATA[嵌套CEF到MFC应用程序中，编译出现一个问题，记录下
原文：https://www.cnblogs.com/qingtian224/p/5833456.html
1&gt;uafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned __int64)” (??2@YAPEAX_K@Z) 已经在 LIBCMTD.lib(new_scalar.obj) 中定义
1&gt;uafxcwd.lib(afxmem.obj]]></description><category></category></item><item><title><![CDATA[CEF源码编译支持H264  4324版本]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113442438</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113442438</guid><author>Crystal_lpx</author><pubDate>Sat, 30 Jan 2021 17:41:08 +0800</pubDate><description><![CDATA[本文主要记录CEF源码编译，为了支持视频播放
一、准备工作
1、建议编译机器尽可能选择高性能的，以及足够的硬盘空间（100G以上）；
2、安装 Microsoft Visual Studio 2017/2019，最好是默认路径，非默认路径需要自行修改编译配置；
3、稳定的VN，用来下载 chromium 源码；
4、如果你用的中文系统，需要更改系统区域设置为英文；
5、至少8GB的RAM（建议至少32GB）和90GB的可用磁盘空间（用于调试版本）；
6、尽可能高性能机器，我的机器编译CPU都是99%。

二]]></description><category></category></item><item><title><![CDATA[CEF Debug模式运行打开网页白屏]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113438997</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/113438997</guid><author>Crystal_lpx</author><pubDate>Sat, 30 Jan 2021 16:48:21 +0800</pubDate><description><![CDATA[CEF Debug模式运行打开网页白屏
问题描述：
Demo在Debug模式运行后会出现白屏，
网上有解决方法：[https://www.cnblogs.com/lvdongjie/p/13226022.html]
解决方法：
1.此时查看日志，在运行目录下会看到一个名为debug.log的文件，错误提示如下

FATAL:dwrite_font_proxy_init_impl_win.cc(91)] Check failed:
fallback_available == base::win::GetVer]]></description><category></category></item><item><title><![CDATA[C++ 32位64位的区别]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/71600721</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/71600721</guid><author>Crystal_lpx</author><pubDate>Thu, 11 May 2017 09:43:52 +0800</pubDate><description><![CDATA[一.32位和64位的概念
所谓32位和64位，指的是CPU的字长，其实主要是 GPRS(General Purpose Regisers,通用寄存器)的数据宽度。电脑内部都是实行2进制运算，处理器（CPU）一次处理数据的能力也是2的倍数。8位处理器、16位处理器、32位处理器和64位处理器，其计数都是2的倍数。一次处理的数据越大，该电脑处理信息的能力越来越大。所谓32位处理器就是一次只能处理32]]></description><category></category></item><item><title><![CDATA[HTML调用Js文件]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/60602989</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/60602989</guid><author>Crystal_lpx</author><pubDate>Mon, 06 Mar 2017 22:06:27 +0800</pubDate><description><![CDATA[如果我们需要调用别的 js文件。怎么处理？

看随机抽取这个例子。在一个页面中如下：




random number

//随机抽取人名    


    
        
        
    
            
        
    




我们可以把 js 放在另外一个文件里，比如当前文件夹的 a.js 中。

这样 html 页面如下：]]></description><category></category></item><item><title><![CDATA[进制转换和按位运算]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/39560771</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/39560771</guid><author>Crystal_lpx</author><pubDate>Thu, 25 Sep 2014 23:40:45 +0800</pubDate><description><![CDATA[#include 
#include 
#include 
 
int btod(char *bstr);       
int dtob(int d, char *bstr);    
 
int main(int argc, char **argv)
{
    char bstr[64] ="";
    memset(bstr,0,sizeof(bstr));
   ]]></description><category></category></item><item><title><![CDATA[Bat 命令学习]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/38744767</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/38744767</guid><author>Crystal_lpx</author><pubDate>Fri, 22 Aug 2014 00:48:23 +0800</pubDate><description><![CDATA[基础部分:
======================================================================

一、基础语法：
    1.批处理文件是一个“.bat”结尾的文本文件，这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。
    2.批处理是一种简单的程序，可以用 if 和 goto 来控制流程，也可以使用 for]]></description><category></category></item><item><title><![CDATA[文件相关函数<io.h>]]></title><link>https://blog.youkuaiyun.com/Crystal_lpx/article/details/38690043</link><guid>https://blog.youkuaiyun.com/Crystal_lpx/article/details/38690043</guid><author>Crystal_lpx</author><pubDate>Tue, 19 Aug 2014 22:44:00 +0800</pubDate><description><![CDATA[dir.h
文件中函数的用法（转
) 
 
 
 
 
chdir()
改变当前目录的函数
 
原形：
int chdir(const char *path) 
功能：把由
path
指定的目录改为当前目录。
path
参数中可以指定驱动器号，如“
a:\\ddd
”
, 
但只是改变该驱动器上的当前目录，对当前活动驱动器上的当前目录无影响。
 
返回值]]></description><category></category></item></channel></rss>