使用_beginthreadex 创建线程并实现多线程同步

多线程第一篇:使用_beginthreadex创建线程 先来一个CreateThread函数和_beginthreadex函数详解: HANDLE WINAPI CreateThread ( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes , // pointer to security attributes _In_ SIZE_T 阅读详情

使用_beginthreadex  来创建线程比CreateThread  更加的安全,但是_beginthreadex 需要传入的参数和CreateThread并不是一样的,但基本相同,只需要做一些转换,线程的同步采用两种方式实现,一是采用关键代码段(已注释)和事件内核对象来实现。 以下是实现:

 

 

#include "stdafx.h"
#include "windows.h"
#include <PROCESS.H>
#include <stddef.h>
#include <iostream.h>


int g_nCount = 0;
typedef unsigned (__stdcall *PTHREAD_START) (void*);


//CRITICAL_SECTION gcs;
HANDLE hEvent = NULL;

 

DWORD WINAPI ThreadProc1(PVOID *pData)
{
 while (g_nCount < 100)
 {  
//  EnterCriticalSection(&gcs);
  WaitForSingleObject(hEvent,50000);
  g_nCount++;
  cout << "thread1" << endl;
  cout << g_nCount << endl;
  SetEvent(hEvent);
  Sleep(1);
//  LeaveCriticalSection(&gcs);
 }
 return 0;
}

DWORD WINAPI ThreadProc2(PVOID *pData)
{
 while (g_nCount < 100)
 { 
//  EnterCriticalSection(&gcs);
  WaitForSingleObject(hEvent,50000);
  g_nCount++;
  cout << "thread2" << endl;
  cout << g_nCount << endl;
  SetEvent(hEvent);
  Sleep(1);
//  LeaveCriticalSection(&gcs);
 }

 return 0;
}

int main(int argc, char* argv[])
{
// InitializeCriticalSection(&gcs);

 hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);

 HANDLE handl1 = (HANDLE)_beginthreadex(NULL,0,(PTHREAD_START)(ThreadProc1),NULL,0,NULL);
 CloseHandle(handl1);

 HANDLE handl2 = (HANDLE)_beginthreadex(NULL,0,(PTHREAD_START)(ThreadProc2),NULL,0,NULL);
 CloseHandle(handl2);

 int m = 0;
 
 cin >> m;
// DeleteCriticalSection(&gcs);
 return 0;
}

 

 

[Win32] 多线程线程同步 多线程:一个进程创建时,默认情况下系统会为它创建一个主线程,(如果使用Native API创建线程就没有主线程,是空的,必须自己创建线程),应用程序可以自己创建线程,还有以前写过的一篇“DLL注入技术”,就是远程在其他进程中创建线程,然后让远程线程load我们的dll。 系统是如何实现多线程的?其实,对于单CPU单核心的设备上,在一个确定的时刻,只能执行内存中的一个指令。所谓的“多任务抢占式 阅读详情

相关推荐

面试篇 - LoRA(Low-Rank Adaptation) 原理

输出示例:trainable params: 262,144 || all params: 6,742,016,000 || trainable%: 0.0039。论文实验显示:零初始化 BB 可使初始损失与预训练模型相差不足0.1%,而非零初始化可能差50%+。若初始 ΔW≠0,模型可能立即偏离预训练学到的知识(如GPT-3突然忘记如何造句)。:如同汽车改装,先保持原厂配置(W),再逐步加装新部件(ΔW),避免直接飙车失控。:大模型的权重变化矩阵 ΔWΔW 通常是低秩的(少数主成分主导变化)。

qq_60245590的博客 1123

采用_beginthreadex创建多线程

采用_beginthreadex创建多线程,5个线程模拟5个人,共同合作完成一项任务,采用齐头进的方式。对_beginthreadex编程有很好的指导意见

verilog学习——Verilog的行为建模/Behavioral modeling(2)

函数的用途是返回要在表达式中使用的值。函数定义始终以关键字function开始,后跟返回类型、名称和在参数中的端口列表。函数以关键字endfunction结束。函数至少有一个输入,如果不返回任何内容,则返回类型为void。由两种方法可以声明函数的输入;函数定义隐式地创建一个与函数同名的内部变量。通过将函数结果分配给内部变量来初始化返回值。函数调用是带有表达式的操作数。① 函数不能包含任何时间控制语句,如#、@、wait、posedge、negedge;

LXY241638的博客 1292

C++多线程实例(_beginThreadex创建多线程)

C++多线程(二)(_beginThreadex创建多线程)   C/C++ Runtime 多线程函数 一 简单实例(来自codeprojct:http://www.codeproject.com/useritems/MultithreadingTutorial.asp

maopig的专栏 5万+

C/C++ _beginthreadex 多线程操作 - 线程同步

其中线程ID用于标识系统中的哪个线程当前拥有互斥对象,计数器用于指明该线程拥有互斥对象的次数。简单来讲,互斥对象就是,同一个内存变量,当线程一在操作他时,线程二就无法进行操作,得等到线程一不操作它了,线程二才可以进行操作它!调用成功,该函数返回所创建的互斥对象的句柄。五、线程同步 ----- 关键代码段 之 线程死锁。四、线程同步 ----- 关键代码段。一、线程同步 ----- 互斥对象。二、线程同步 ----- 事件对象。一、线程同步 ----- 互斥对象。三、线程同步 ----- 信号量。

az44yao的专栏 177

C++ 使用_beginthreadex创建线程线程句柄(等待线程关闭)、线程id的作用(发送线程消息)

_beginthreadex c语言库 process.h 中的函数, 用来创建一个线程 unsignedlong_beginthreadex( void*security,//安全属性,为NULL时表示默认安全性 unsignedstack_size,//线程的堆栈大小,一般默认为0 ...

qq_24127015的博客 1万+

Qt中的线程同步问题

Qt中的线程同步

weixin_41377572的博客 380

同步处理_2

 #include #include #include   UINT WINAPI Thread(LPVOID para){ static int i = 1; printf("this is Thread  %d/n", i++); Sleep(5000); return 0;} int main(){ HANDLE handle[2]; handle[0]

xum2008的专栏 460

多线程--事件Event

多线程,事件

_ 576

多线程

1.创建多线程 Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来创建线程;另外一种就是调用MSVC CRT的函数_beginthread()或_beginthreadex()来创建线程。 相应的退出线程也有两个函数Windows API的ExitThread()和CRT的_endthread()。 根据Windows API和M...

weixin_30487201的博客 64

03CriticalSection

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<process.h> 4 #include<windows.h> 5 6 int g_nCount1 = 0,g_nCount2 = 0; 7 bool g_bThreadProc; 8 CRITICAL_SE...

weixin_34082695的博客 62

一份面试题+整理的答案

在博客园看到一份面试题,觉得挺有意思,现在贴出来,整理了一份答案。 原帖地址:http://www.cnblogs.com/feihe0755/p/3644295.html extern "C"的作用? extern "C" 修饰的变量和函数是按照C语言方式编译和连接的。 #pragma once方式和#ifndef方式的区别? (转)#ifndef的方式受C/C++语言标准支持。它不...

weixin_30886233的博客 187

C/C++ _beginthreadex 多线程操作

深入研究_beginthreadex创建线程的方式,写下心得!

cpp_learner的博客 9142

_beginThreadex创建多线程解读

_beginThreadex创建多线程解读 一、需要的头文件支持  #include          // for _beginthread() 需要的设置:ProjectàSetting-->C/C++-->User run-time library 选择Debug Multithreaded 或者Multithreaded。即使用: MT或MTD。 源码如下: #include

铭毅天下Elasticsearch 5万+

采用_beginthread/_beginthreadex函数创建多线程

1、CRT简介: CRT: (C Runtime Library)即C运行时库,是系统运行的基础,包含了c常用的函数集(如:printf,malloc,strcpy等),为运行main做了初始化环境变量、堆、io等资源,在结束后清理。 在Windows环境下,VC提供的 C run-time library又分为动态运行时库、静态运行时库、多线程、单线程、调试版本(Debug)、发行版本(R

cbNotes的专栏:不积硅步,无以至千里;不积小流,无以成江海! 1万+

c++多线程之_beginthreadex

创建一个线程,具体用法查看代码 ,特别注意: 如果在代码中有使用标准C运行库中的函数时,尽量使用_beginthreadex()来代替CreateThread() 因为_beginthreadex在内部调用了CreateThread,在调用之前_beginthreadex做了很多的工作,从而使得它比CreateThread更安全。 例子一 #include <windows.h&g...

sinat_31608641的博客 5498

多线程1: CreateThread与_beginthreadex创建多线程

本文将带领你与多线程作第一次亲密接触,深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex使用多线程其实是非常容易的,下面这个程序的主线程创建了一个子线程等待

chlele0105的专栏 1万+

_beginthreadex

本文将带领你与多线程作第一次亲密接触,深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex?      使用多线程其实是非常容易的,下面这个程序的主线程创建

zhanghuan_wangkai的博客 1万+

_beginthreadex 创建多线程解读

一、解释 (1)如果你正在编写C/C++代码,决不应该调用CreateThread。相反,应该使用VisualC++运行期库函数_beginthreadex,退出也应该使用_endthreadex。如果不使用Microsoft的VisualC++编译器,你的编译器供应商有它自己的CreateThread替代函数。不管这个替代函数是什么,你都必须使用。 (2)因为_beginthreadex和_en...

Keep Moving~ 1485

火鸟地方门户系统V6.8+2021年最新火鸟门户地方门户系统至尊版.7z

火鸟地方门户系统V6.8 | 2021年最新火鸟门户地方门户系统至尊版郑重声明,此系统仅供研究学习使用,切勿商用,保护知识产权,支持正版!包含4端:PC+H5+小程序+APP,我看了下一共16套模板,剩下我就不过多介绍了,自行看演示吧测试环境:PHP7.0+MySQL5.6

上一篇: 对比较复杂的数据结构进行建模分析
下一篇: C++类型转换
zhshgap
博客等级 码龄20年 9粉丝 16原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值