- 博客(20)
- 资源 (3)
- 收藏
- 关注
原创 #pragma once 与 #ifndef比较分析
为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。方式一:#ifndef __SOMEFILE_H__#define __SOMEFILE_H__... ... // 一些声明语句#endif方式二: #pragma ...
2018-09-26 09:22:34 348
原创 CSDN-markdown编辑器使用说明
欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体...
2018-09-26 09:17:01 276
原创 可以供MFC调用的,QT实现的DLL(qtwinmigrate实现)
MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理#include <qmfcapp.h>#include <qwinwidget.h>#include <QtGui>#include <QtGui/QMessageBox>#include <windows.h>#inclu...
2018-09-13 09:00:19 2713
原创 CreateRemoteThread函数
CreateRemoteThread函数创建在另一个进程的虚拟地址空间中运行的线程。使用CreateRemoteThreadEx函数创建在另一个进程的虚拟地址空间中运行的线程,并可选择指定扩展属性。语法HANDLE CreateRemoteThread( HANDLE hProcess, LPSECURITY_ATTRIBUTES lp...
2018-09-11 15:35:52 3192
原创 使用线程本地存储
线程本地存储(TLS)使同一进程的多个线程能够使用由TlsAlloc函数分配的索引来存储和检索线程本地的值。在此示例中,在进程启动时分配索引。当每个线程启动时,它会分配一个动态内存块,并使用TlsSetValue函数在TLS槽中存储指向此内存的指针。CommonFunc函数使用TlsGetValue函数来访问与调用线程本地的索引相关联的数据。在每个线程终止之前,它会释放其动态内存。在进程终止之前,...
2018-09-11 15:21:46 692
原创 线程池
有许多应用程序创建线程,在休眠状态下花费大量时间等待事件发生。其他线程可以进入休眠状态,仅定期唤醒以轮询更改或更新状态信息。线程池使您可以通过为应用程序提供由系统管理的工作线程池来更有效地使用线程。至少有一个线程监视排队到线程池的所有等待操作的状态。等待操作完成后,来自线程池的工作线程执行相应的回调函数。本主题描述了原始线程池API。Windows Vista中引入的线程池API更简单,更可靠...
2018-09-11 15:14:37 202
原创 线程池API
线程池API线程池应用程序编程接口(API)使用基于对象的设计。以下每个对象都由用户模式数据结构表示:池对象是一组可用于执行工作的工作线程。每个进程可以根据需要创建具有不同特征的多个隔离池。每个进程都有一个默认池。清理组与一组回调生成对象相关联。存在等待并释放作为每个清理组成员的所有对象的函数。这使应用程序无需跟踪它创建的所有对象。将工作对象分配给池,并可选择分配给清理组。它可以被发...
2018-09-11 15:09:08 535
原创 线程池概述
线程池一个线程池的工作线程代表应用程序的高效执行异步回调的集合。线程池主要用于减少应用程序线程的数量并提供工作线程的管理。应用程序可以对工作项进行排队,将工作与可等待的句柄相关联,根据计时器自动排队,并与I / O绑定。线程池架构以下应用程序可以从使用线程池中受益:高度并行的应用程序,可以异步分派大量小工作项(例如分布式索引搜索或网络I / O)。一个创建和销毁大量线程的应用程...
2018-09-11 14:53:49 194
原创 使用重定向的输入和输出创建子进程
本主题中的示例演示如何使用控制台进程中的CreateProcess函数创建子进程。它还演示了一种使用匿名管道重定向子进程的标准输入和输出句柄的技术。请注意,命名管道也可用于重定向进程I / O.所述CreatePipe函数使用SECURITY_ATTRIBUTES结构来创建可继承句柄读写两个管道的端部。一个管道的读取端用作子进程的标准输入,另一个管道的写入端是子进程的标准输出。这些管道句柄在S...
2018-09-11 14:43:43 1016
原创 使用线程池功能
此示例创建自定义线程池,创建工作项和线程池计时器,并将它们与清理组关联。该池由一个持久性线程组成。它演示了以下线程池函数的使用:CloseThreadpool CloseThreadpoolCleanupGroupCloseThreadpoolCleanupGroupMembersCloseThreadpoolWaitCreateThreadpoolCreateThreadpool...
2018-09-11 14:41:11 213
原创 使用线程——创建线程
该CreateThread函数创建一个进程的新的线程。创建线程必须指定新线程要执行的代码的起始地址。通常,起始地址是程序代码中定义的函数的名称(有关更多信息,请参阅ThreadProc)。此函数采用单个参数并返回DWORD值。一个进程可以让多个线程同时执行相同的功能。以下是演示如何创建执行本地定义函数的新线程的简单示例MyThreadFunction。调用线程使用WaitForMultip...
2018-09-11 13:24:04 1764
原创 CreateThread函数
创建一个在调用进程的虚拟地址空间内执行的线程。要创建在另一个进程的虚拟地址空间中运行的线程,请使用 CreateRemoteThread函数。语法HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_...
2018-09-11 12:26:19 29050
原创 c++执行vbs脚本
#include<fstream>using namespace std;int main() { fstream out("StartIE.vbs",ios::out); out<<"AppName=\"启动IE\"\n\ Set Wshell=WScript.CreateObject(\"WScript.Shell\")\n\...
2018-09-10 11:09:49 2406 1
原创 protocol buffers使用说明
一、什么是protocol buffersProtocol buffers是一个灵活的、高效的、自动化的用于对结构化数据进行序列化的协议,与XML相比,Protocol buffers序列化后的码流更小、速度更快、操作更简单。你只需要将要被序列化的数据结构定义一次(译注:使用.proto文件定义),便可以使用特别生成的源代码(译注:使用protobuf提供的生成工具)轻松的使用不同的数据流完成...
2018-09-05 08:39:34 174
原创 内存问题提醒!结构体+protobuf做协议体发送!序列化
内存的三种分配方式: 1. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。 2. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。 3. 在堆区分配:动态分配内存。用new/malloc时开辟,delete/fre...
2018-09-05 08:32:45 1748
原创 C++11多线程----线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段。并行是指两个或多个独立的操作同时进行。注意这里是同时进行,区别于并发,在一个时间段内执行多个操作。在单核时代,多个线程是并发的,在一个时间段内轮流执行;在多核时代,多个线程可以实现真正的并行,在多核上真正独立的并行执行。例如现在常见的4核4线程可以并行4个线程;4核8线程则使用了超线程技术,把一个物理核模拟为2个逻辑核心...
2018-09-04 23:49:03 1188
原创 控制台程序隐藏方法总结(四种)
学习计算机,往往先从Windows环境下学习编程,学习编程,往往从C学起,学习C,往往又从控制台程序学习,何为控制台,就是那个黑框白字的界面。对于这样一个最初认为奇陋无比而现在认为无所不能的编程平台,有时候需要将界面隐藏起来。那么如何做呢?方法1: 在头文件下加上一句预处理命令:#pragma comment( linker, "/subsystem:\"windows\...
2018-09-04 20:26:48 18288 3
原创 C++获取本机所有ip地址,可区分类型是有线无线虚拟机还是回环
一个小程序,可以获取本地所有ip地址,包括有线,无线,虚拟机,环回接口网卡,等。如图,一台机器多个网卡: 程序执行结果: #include"stdio.h"#include"string.h"#include"Winsock2.h"#pragma comment(lib,"WS2_32.lib")void main(){ printf("***********...
2018-09-02 20:43:41 2429 5
原创 Socket网络编程【获取本机IP】
//12.3.2//运行环境VS2013//获取本地IP #include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")void main(){// 调用WSAStarup初始化WINsock库WSADATA wsaData;::WSAStartup(MAKEW...
2018-09-02 20:36:03 3311
原创 Qt之QProcess(一)运行cmd命令
Qt为此提供了QProcess类,QProcess可用于完毕启动外部程序,并与之交互通信。一、启动外部程序的两种方式: (1)一体式:void QProcess::start(const QString &amp; program, const QStringList &amp; arguments, OpenMode mode = ReadWrite) 外部程序启动后。将...
2018-09-02 20:34:35 17482 2
GoogleBoost谷歌加速器
2018-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人