大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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账号...