4个线程池_vc2010线程win32线程已退出

4个线程池_vc2010线程win32线程已退出在windows中,系统提供了QueueUserWorkItem函数实现异步调用,这个函数相当于在线程池中建立多个用户工作项目,跟普通线程机制一样,线程池也有线程的同步等机制。 【函数原型】BOOLWINAPIQueueUserWorkItem(__inLPTHREAD_START_ROUTINEFunction,__inP…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在windows中,系统提供了QueueUserWorkItem 函数实现异步调用,这个函数相当于在线程池中建立多个用户工作项目,跟普通线程机制一样,线程池也有线程的同步等机制。

 

【函数原型】

BOOL WINAPI QueueUserWorkItem(
  __in          LPTHREAD_START_ROUTINE Function,
  __in          PVOID Context,
  __in          ULONG Flags
);

【参数解析】

Function 就是用户定义的函数;

context 是PVOID指针,也是Function的参数;

Flags 表示一组标志值,作用可通过查MSDN看到

WT_EXECUTEDEFAULT  :工作项目放入非I/O组件得线程中。

WT_EXECUTEINIOTHREAD :工作项目放入I/O组件的线程中,这样的线程在I/O请求没有完成之前不会被终止运行,防止因为线程被终止导致I/O请求丢失。

WT_EXECUTEINPERSISTENTTHREAD :放入永久线程池。

WT_EXECUTELONGFUNCTION  :工作项目需要长时间的工作,系统会据此安排更多的线程。

 

【示例代码】

#include <assert.h>
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;


DWORD WINAPI Thread1(PVOID pContext);
DWORD WINAPI Thread2(PVOID pContext);
DWORD WINAPI Thread3(PVOID pContext);

CRITICAL_SECTION g_cs;

int main(int argc, char * argv[])
{
	HANDLE hCompleteEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
	
	InitializeCriticalSection(&g_cs);

	QueueUserWorkItem(Thread1, L"I'm thread 1", WT_EXECUTEINLONGTHREAD);
	QueueUserWorkItem(Thread2, L"I'm thread 2", WT_EXECUTEINLONGTHREAD);
	QueueUserWorkItem(Thread3, L"I'm thread 3", WT_EXECUTEINLONGTHREAD);

	WaitForSingleObject(hCompleteEvent, INFINITE);

	DeleteCriticalSection(&g_cs);

	CloseHandle(hCompleteEvent);
	//getchar();

	return 0;
}
//
DWORD WINAPI Thread1(PVOID pContext)
{
	EnterCriticalSection(&g_cs);
	wchar_t * wszVal = (wchar_t*)pContext;
	wcout << L"wszVal:" << wszVal << endl;
	LeaveCriticalSection(&g_cs);

	for(int i=0; i<=50; i++)
	{
		EnterCriticalSection(&g_cs);
		cout << "One Thread Output : " << i <<endl;
		LeaveCriticalSection(&g_cs);
	}

	return 0;
}
//
DWORD WINAPI Thread2(PVOID pContext)
{
	EnterCriticalSection(&g_cs);
	wchar_t * wszVal = (wchar_t*)pContext;
	wcout << L"wszVal:" << wszVal << endl;
	LeaveCriticalSection(&g_cs);

	for(int i=0; i<=50; i++)
	{
		EnterCriticalSection(&g_cs);
		cout << "Two Thread Output : " << i <<endl;
		LeaveCriticalSection(&g_cs);
	}
	return 0;
}
//
DWORD WINAPI Thread3(PVOID pContext)
{
	EnterCriticalSection(&g_cs);
	wchar_t * wszVal = (wchar_t*)pContext;
	wcout << L"wszVal:" << wszVal << endl;
	LeaveCriticalSection(&g_cs);

	for(int i=0; i<=50; i++)
	{
		EnterCriticalSection(&g_cs);
		cout << "Three Thread Output : " << i << endl;
		LeaveCriticalSection(&g_cs);
	}
	return 0;
}

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190015.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(2)


相关推荐

  • 前向传播算法(Forward propagation)与反向传播算法(Back propagation)「建议收藏」

    前向传播算法(Forward propagation)与反向传播算法(Back propagation)「建议收藏」虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解。因此特意先对深度学习中的相关基础概念做一下总结。先看看前向传播算法(Forwardpropagation)与反向传播算法(Backpropagation)。1.前向传播如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点

  • 微信小程序搭建测试环境_微信小程序 视频

    微信小程序搭建测试环境_微信小程序 视频开发环境:一、概念二、开发环境的组成三、配置基本流程及流程总结:测试环境:一、概述:测试环境的秩序体现在以下几个环节:生产环境(线上环境):一、概述:二、上线原则总结

    2022年10月28日
  • vue+mongodb_mongodb查询速度

    vue+mongodb_mongodb查询速度1、查询时间范围在{find}里面输入:{time:{$gte:newDate(“2016/07/2008:00:00”),$lte:newDate(“2016/07/2008:01:01”)}}2、查询某字段包含字符串{name:newRegExp(“^(?!.*?electric).*$”)}3、查询不包含某字符串{

  • KRACK 攻击解密安卓传输数据,OpenBSD 提前释出补丁

    KRACK 攻击解密安卓传输数据,OpenBSD 提前释出补丁比利时鲁汶大学的两位研究人员正式披露了被命名为KRACK(KeyReinstallationAttacks)的密钥重安装攻击,他们开发的概念验证攻击演示了对Android设备传输数据的解密能力。如果你的设备支持Wi-Fi,那么很有可能你的设备受到影响。运行Android、Linux、Apple、Windows、OpenBSD、联发科和…

  • cpu overclocking_cpu memory overclocking

    cpu overclocking_cpu memory overclockingWhydoeskworkerhogyourCPU?TofindoutwhyakworkeriswastingyourCPU,youcancreateCPUbacktraces:watchyourprocessorload(withtoporsomething)andinmomentsofhighloadthroughkworker,executeechol>/proc/sysrq-triggertocreatea

  • javaWeb项目重命名的问题

    javaWeb项目重命名的问题

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号