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;
}

 

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《WCF技术内幕》翻译28:第2部分_第5章_消息:使用消息头(中)

    《WCF技术内幕》翻译28:第2部分_第5章_消息:使用消息头(中)

    2022年3月11日
    33
  • ajax的面试题_java中框架面试题

    ajax的面试题_java中框架面试题1:什么是ajax?ajax作用是什么?异步的javascript和xmlAJAX是一种用于创建快速动态网页的技术。ajax用来与后台交互2:原生jsajax请求有几个步骤?分别是什么//创建XMLHttpRequest对象varajax=newXMLHttpRequest();//规定请求的类型、URL以及是否异步处理请求。ajax.open(‘GET’,u…

    2022年8月28日
    0
  • httprunner(4)录制生成测试用例[通俗易懂]

    httprunner(4)录制生成测试用例[通俗易懂]前言写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。har2case我们先来了解一下另一个项目har2case他的工作原理就是将当前主流的抓

    2022年7月31日
    3
  • Winform布局美化样例

    Winform布局美化样例做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计总是会精益求精,力求做到更好用、更美观,这样才能吸引客户使用。目前的主体界面设计,可以使用很多控件进行美化,这样能使得开发者能够迅速开发好美观的界面,也可以使得界面总体性有一个统一、规范的基准。一般推

    2022年5月28日
    33
  • sqlserver字符串转换为日期_sqlserver默认日期格式

    sqlserver字符串转换为日期_sqlserver默认日期格式MyBeNsqlserver字符串转成日期格式在SQLServer数据库中,SQLServer日期时间格式转换字符串可以改变SQLServer日期和时间的格式,是每个SQL数据库用户都应该掌握的。本文我们主要就介绍一下SQLServer日期时间转字符串的相关知识,接下来就让我们一起来了解一下这部分内容。字符串转日期时间:convert(datetime,列名)日期时间转字符串…

    2022年10月8日
    0
  • android toast用法_android五种布局的特点

    android toast用法_android五种布局的特点Toast用于向用户显示一些帮助/提示。下面我做了5中效果,来说明Toast的强大,定义一个属于你自己的Toast。1.默认效果代码Toast.makeText(getApplicationContext(),"默认Toast样式",     Toast.LENGTH_SHORT).show(); 2.自定义显示位置效果代码toast=Toast.mak…

    2022年9月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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