C++进阶
总结C++开发技巧和高级特性
SteveRocket
总结技术,分享技术,交流技术,我们一起学习,韶华易逝......
展开
-
CPP:new在堆区、栈区、静态区开辟内存
char str[1024] = { 0 };//全局静态区void main1(){ int *p1 = new int[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};//堆上创建 开辟的内存 int *p2 = new (str)int[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};//ok 在str字段处开始 分配内存 int原创 2015-08-21 17:56:16 · 1058 阅读 · 1 评论 -
CPP:动态数组vector是如此之简单,array显得不友好
#include#include //适用于任何数组using namespace std;//array 一旦分配 就无法变长//vector分配的数组在堆上,适用于任何数据类类型 可以无限嵌套 收缩使用迭代器,动态数据增长 相当于数据结构中的线性表,可以实现线性存储void main1(){ vector myint{ 1, 2, 3, 4, 5, 6 };原创 2015-08-22 00:03:47 · 944 阅读 · 1 评论 -
工作经验总结之C++语言关键字的作用、特性和使用方式
关键字(keyword)属于保留字,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing-token)中区别出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。原创 2023-05-15 07:00:00 · 831 阅读 · 0 评论 -
线程1:临界区,解决线程访问冲突问题
#define N 64int num = 0;CRITICAL_SECTION cs1;CRITICAL_SECTION cs2;//定义临界区,结构体变量DWORD WINAPI add(void *p){ EnterCriticalSection(&cs1); for (int i = 0; i < 100000;i++) { num++; } LeaveCri原创 2015-08-21 14:17:31 · 855 阅读 · 0 评论 -
线程操作:冻结与解冻线程
DWORD WINAPI fun(void *p){ int i = 0; while (++i) { printf("\n%d", i); if (i>8000) { ExitThread(0); } Sleep(500); } return 0;}//主线程,主导作用,管理调用其他线程void main(){ HANDLE hd = Create原创 2015-08-21 14:22:39 · 2806 阅读 · 0 评论 -
线程4:原子变量与原子操作
int data = 0;//多个线程同时访问一个变量,同时写入,会冲突//一个变量是线程安全,多线程同时读写没有误差//使用原子变量解决线程冲突问题DWORD WINAPI runX(void *p){ for (int i = 0; i < 10000; i++) { //InterlockedIncrement(&data);//精确 操作完成了后续才能继续原创 2015-08-21 17:26:31 · 422 阅读 · 1 评论 -
CPP线程:生产者与消费者的问题
#include #include #include#include #include#include #include using namespace std;mutex m;condition_variable full,empty;bool flag = true;//标志 消费完了就退出vectormyint(10);//开辟10个元素int num = 10;原创 2015-08-22 01:31:00 · 564 阅读 · 1 评论 -
UDP通信(Red Hat Enterprise Linux 6)
UDP serverUDP client原创 2015-08-25 00:11:16 · 431 阅读 · 0 评论 -
1.线程与进程概念性总结(初级)
线程特点:1.线程共享进程数据,但也拥有自己的一部分数据2.一切进程至少都有一个执行线程fork和创建新线程的区别 :fork:一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()原创 2015-08-20 00:48:19 · 461 阅读 · 1 评论 -
CPP多线程与可变参数
#include //可变参数头文件//可变参数 在多线程中的应用int go(const char*ftm, ...){ va_list ap;//指针 第一个数据 va_start(ap, ftm);//开始读取的位置 vprintf(ftm, ap);//调用 接受可变参数 va_end(ap);//结束 return 0;}//使用可变参数创建线程void原创 2015-08-22 00:13:46 · 469 阅读 · 0 评论 -
线程6:互斥量,解决线程冲突
HANDLE mutex = NULL;int num = 0;DWORD WINAPI add(void *p){ WaitForSingleObject(mutex, INFINITE); for (int i = 0; i < 100000; i++) { num++; } ReleaseMutex(mutex);}//临界区 超过64个线程就over了、互斥量用原创 2015-08-21 17:04:45 · 397 阅读 · 1 评论 -
CPP多线程实现并行计算
#include #include #include #include #include #include #include using namespace std;#define COUNT 5000000long long add(vector *arr, long long start, long long count){ static mutex m;//仅仅初始原创 2015-08-22 00:31:19 · 3063 阅读 · 1 评论 -
线程2:线程通信事件机制(单线程、两个线程、多个线程通信)
//一个线程之间的通信 DWORD WINAPI firstthread(void *p) { MessageBoxA(0, "1", "1", 0); printf("第1个线程执行完成\n"); SetEvent(event[0]);//发出事件信号 return 0; } DWORD WINAPI secondthread(void *p) { WaitForS原创 2015-08-21 14:35:32 · 755 阅读 · 1 评论 -
线程自动加锁与自动解锁:lock_guard & unique_lock
#define N 1000000mutex g_mutex;void add(int *p){ for (int i = 0; i < N; i++) { unique_lockulk(g_mutex);//OK unique_lock 加锁,没有mutex所有的权限(根据mutex的属性来判断是否能够加锁, 自动加锁自动解锁) 时间上比lock_guard 慢 //原创 2015-08-22 01:03:35 · 4084 阅读 · 4 评论 -
进程(WINAPI),遍历并查找树状的进程信息,实现控制系统进程
#include //检索系统所有进程void showall(){ PROCESSENTRY32 pe32 = {0}; pe32.dwSize = sizeof(pe32); //查找进程 HANDLE hpprocess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//CreateToolhelp32Snapshot创建快原创 2015-08-23 01:38:23 · 1259 阅读 · 0 评论 -
线程3:时间同步
void main1(){ HANDLE timer = CreateWaitableTimer(NULL, TRUE, NULL);//创建定时器 if (NULL==timer ) { return; } else { LARGE_INTEGER time; time.QuadPart = -50000000;//2秒 SetWaitableTimer(time原创 2015-08-21 17:24:34 · 332 阅读 · 0 评论 -
线程调度实现面试题:输出ABCDABCD.....
#include #include #include #include using namespace std;int LOOP = 10;//执行次数int flag = 0;//0 1 2 切换线程mutex m;//互斥量condition_variable cv;//用于通知全局void fun(int id){ for (int i = 0; i < LO原创 2015-08-22 00:48:22 · 354 阅读 · 0 评论 -
线程:CPP lambda表达式与多线程
c++ lambda表达式获取线程ID以及线程等待#include #includethread th1([]() { this_thread::sleep_for(chrono::seconds(3)); cout原创 2015-08-21 14:32:04 · 1886 阅读 · 0 评论