c++
kencao01
这个作者很懒,什么都没留下…
展开
-
一个简单可执行队列(ExecutableQueue)实现的注意事项
#ifndef EXECUTABLE_QUEUE_H#define EXECUTABLE_QUEUE_H#include <condition_variable>#include <mutex>#include <queue>#include <thread>class ExecutableQueue final {public: void start() { thread_ = std::thread([this]() {原创 2021-04-11 21:22:35 · 166 阅读 · 0 评论 -
vscode 配置g++ 逗号参数
"args": [ "-g", "${file}", "-std=c++17", "-Wall", "-static", "-Wl,--whole-archive", "-lrt", "-lpthread", "-Wl,--no-whole-archive", "-o", "${fileDirname}/a.out"],网上搜了很久没找到正确了,隔了几天自己试成功了,给大家参考。...原创 2020-10-07 20:32:53 · 486 阅读 · 1 评论 -
vscode 远程 Ubuntu 静态连接 pthread,执行报错:segmentation fault
参考链接:https://stackoverflow.com/questions/58848694/gcc-whole-archive-recipe-for-static-linking-to-pthread-stopped-working-in-recvscode task.json 设置:"args": [ "-g", "${file}", "-std=c++17", "-Wall", "-static", "-Wl,--whole-archive", "-lrt",原创 2020-10-07 20:30:39 · 353 阅读 · 0 评论 -
lock_guard 与 unique_lock 区别
lock_guard 非常简单,源码没超过20行。就是相当于 mutex 自动资源管理器。unique_lock 功能多一些,可以进行 lock, unlock, try_lock 等。源码也不复杂。其实觉得没必要搞一个lock_guard,用一个不就行了,还能减少程序员记忆负担。...原创 2020-09-21 16:10:21 · 255 阅读 · 0 评论 -
undefined reference to `mysql_init‘
出现这个错误原因是没有连接到mysql开发库。如果没有安装,网上可以搜索怎么安装。我遇到的情况是把源文件放到了库文件的后边:gcc $(mysql_config --include) $(mysql_config --libs) xxx.c这样编译就会出问题。如果像下面这样写,就可以解决这个问题,如下:gcc $(mysql_config --include) conn_mysql.c $(mysql_config --libs)...原创 2020-09-18 12:08:38 · 605 阅读 · 0 评论 -
C++ 单例模式
static Singleton& instance() { static Singleton s; return s; }这种方式在 C++11 之前是有线程安全问题的,C++ 11 之后没有线程安全问题。具体编译哪个版本开始这次这个特性,可以在网上搜索。当有多个线程同时进入这个函数的时候,只有一个线程会构造 Singleton 对象,其他线程会阻塞等待,等对象构造完后,唤醒所有等待的线程。...原创 2020-09-17 14:30:48 · 103 阅读 · 0 评论 -
关闭另一个线程的窗口
PostThreadMessage 发送的消息都不会发送到窗口,因为没有窗口句柄。只有 WM_QUIT 起作用,除非消息循环自己来写。SendMessage可以发送消息,然后当前线程阻塞,窗口(主线程)会在队列中得到这个消息,这个是看调用栈看的,具体原理有待研究。例如:SendMessage(dlgMain.m_hWnd, WM_COMMAND, (WPARAM)(IDCANCEL), 0);还有,在 WTL 中,如果发送 WM_DESTROY,会导致 dlgMain 析构的时候 m_hwnd 没有原创 2020-09-15 17:39:39 · 232 阅读 · 0 评论 -
Windows 设置程序开机启动
最近有一个需求,要在 windows 上设置一个 exe 开机启动。这个按照通常的做法,只需在注册表中添加一项即可实现。HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run具体可参考:How to Add, Delete, Enable, or Disable Startup Items in Windows 10写好代码后,把一个测试 exe 设置成开机启动,重启机器。测试 exe 顺利的开机重启了。一切都 ok 后,交个测原创 2020-08-21 16:46:49 · 732 阅读 · 0 评论 -
How to search a non-ASCII character in a c++ string?
https://stackoverflow.com/questions/31396151/how-to-search-a-non-ascii-character-in-a-c-string转载 2020-07-21 17:22:24 · 134 阅读 · 0 评论 -
std::string utf8 find
应该是可以的,因为 utf8 编码每个字符肯定不会相同。原创 2020-07-21 17:06:02 · 259 阅读 · 0 评论 -
io_context.stop 后不要调用 io_context.reset
io_context.reset 内部会把 stopped_ 变量设置成 0,也就是没有 stop 的意思。等到 io_context.run 判断的时候就不会返回。#include <thread>#include <boost/asio.hpp>#include <boost/asio/io_context.hpp>#include <iostream>#include <memory>#include <Windows.原创 2020-06-11 15:56:37 · 971 阅读 · 0 评论 -
C++ 条件变量
条件变量的 wait 或者 wait_for 是理解条件变量的关键。wait_for 可以设置超时时间。所以只拿 wait 说。wait 调用后,先去判断后边的条件(lambda)是否满足,如果满足了直接就返回了,如果不满足就等待被唤醒。当被唤醒后,wait 先把第一个参数加锁,这样其他线程就不能进入关键区,也就不能再次唤醒这个条件变量。wait 检查条件是否满足,如果不满足,释放锁,并继续等待,让其他线程有机会执行。参考文章:https://segmentfault.com/a/1190000006原创 2020-06-11 12:29:07 · 740 阅读 · 0 评论 -
string 记录
string WavReader::toString(int8_t* bytes, unsigned int size) { return string{(char*)bytes, size};}来源于 《C++ 测试驱动开发》那本书,上边代码片段把一个buf 变成一个 string 类型。原创 2020-06-03 10:16:19 · 137 阅读 · 0 评论 -
记录 Visual Studio 隐式使用 dll
demo_dll.h#pragma once#ifdef DEMO_DLL #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif DLL_API int add(int a, int b);DLL_API int substract(int a, int b);demo_dll.cpp#include "demo_dll.h"DLL_API int ad原创 2020-06-01 21:00:50 · 207 阅读 · 0 评论 -
C++ regex 总结
regex_match 完整匹配一个字符串,如果字符串与正则完整匹配,那么函数返回 true,否则返回 false。这个是最简单常用的函数。原创 2020-05-21 15:52:25 · 229 阅读 · 0 评论 -
stdafx.cpp 文件的预编译属性是创建 Create (/Yc)
如果重新创建stdafx.cpp 的话,直接编译工程会失败,提示没有找到预编译头文件生产的代码。这时候,右键 stdafx.cpp 文件,设置它的预编译属性为 Create,再次编译就会成功了。...原创 2019-09-16 10:31:56 · 227 阅读 · 0 评论 -
shared_from_this 崩溃问题
class foo : public enable_shared_from_this<foo>{public: shared_ptr<foo> test() { return shared_from_this(); }};int main(int argc, char* argv[]){ foo* p = new ...原创 2019-09-06 18:23:33 · 1939 阅读 · 0 评论