当前位置: 首页 > news >正文

国际外贸网站建设前端自适应模板

国际外贸网站建设,前端自适应模板,用wordpress做的站点,加强网站建设的通知原文 窗口中的异步过程调用(APC)是可附加进线程的对象.每个线程都有自己的存储要调用的函数和参数的APC队列. 想法是,希望由特定线程而不是某个任意线程执行a函数.这是因为线程所属的进程有时很重要,因此APC(执行时)可完全访问该进程资源. 技术上,有用户模式,内核模式和特殊…

原文

窗口中的异步过程调用(APC)是可附加进线程的对象.每个线程都有自己的存储要调用的函数和参数APC队列.

想法是,希望由特定线程而不是某个任意线程执行a函数.这是因为线程所属的进程有时很重要,因此APC(执行时)可完全访问该进程资源.

技术上,有用户模式,内核模式特殊内核模式APC,这里,讨论用户模式APC,即窗口接口直接支持的用户模式APC.
还有特殊用户模式APC,但它一般不可用.下面是线程及其APC队列的概念表示:

线程==用户模式APC队列 APC APC APC APC
线程==内核模式APC队列 APC APC 线程及其`APC`队列

当在线程中排队用户模式APC时,APC只是坐在队列中闲着.要实际运行当前附加进线程的APC,该线程必须进入可警告等待(也叫可警告状态).

在该状态时,线程队列中的任何和所有APC将按顺序执行.但是线程如何进入可警告等待?

有一些函数可完成.最简单的是扩展的休息函数SleepEx,这里:

DWORD SleepEx(DWORD msec, BOOL alertable);

如果可警告,则该函数休息相同.否则,线程将休息指定的时间(可为零),如果在其队列中任何APC退出(或在休息时出现),则现在将执行并结束休息,此时,SleepEx返回值WAIT_IO_COMPLETION而不是零.

典型的调用可能是SleepEx(0,TRUE),以强制运行所有排队的APC(如果有).可按APC"垃集"对待此调用.如果线程从未进入可警告等待,则不会执行任何附加的APC.

进入可警告等待的其他方法,涉及使用各种等待函数的扩展版本,如WaitForSingleObjectEx,WaitForMultipleObjectsEx,它们都接受与SleepEx一样的额外的布尔参数.
这里
这里
MsgWaitForMultipleObjectsEx也可这样,只是使用(MWMO_ALERTABLE)标志,而不是指定可警告状态的极.
这里

异步I/O完成

用户模式APC"经典"用法是,取异步I/O操作的通知.对此,窗口有多种机制,其中一个涉及APC.即,ReadFileExWriteFileEx,API接收一个(与其非Ex变量相比)异步I/O操作完成时要调用的回调额外的参数.
这里
这里

问题是,回调包装在请求线程中排队的APC中,即只能在该线程进入可警告等待时执行它.下面是一些概念代码:

HANDLE hFile = ::CreateFile(..., FILE_FLAG_OVERLAPPED, nullptr);
OVERLAPPED ov{};
ov.Offset = ...;
::ReadFileEx(hFile, buffer, size, &ov, OnIoCompleted);//其他工作......//不时执行 APC:
::SleepEx(0, TRUE);

完成例程有以下原型:

void OnIoCompletion(DWORD dwErrorCode,DWORD dwNumberOfBytesTransfered,LPOVERLAPPED lpOverlapped);

实际上,这种通知异步/O完成的机制不是很流行,因为使用同一线程来完成一般不方便.事实上,线程可能会在I/O完成之前退出.尽管如此,它仍是一个利用APC的选项.

进程中注入DLL

有时"强制"另一个进程加载你提供的DLL很有用.完成的经典方法是,使用按LoadLibrary,API的地址设置"线程函数"的CreateRemoteThread,API,因为从二进制角度来看,线程的函数LoadLibrary有相同原型,因为两者都接受指针.
这里
这里

LoadLibrary传递要加载的DLL路径.视频
完整源码在此.

该方法的问题是它非常明显,在创建线程时会通知反恶意软件内核驱动,如果由不同进程中的线程创建,在驱动看来,是可疑的.

顺便,CreateRemoteThread"合法"用法是调试器通过强制进程中的新线程调用DbgBreakPoint,来强制中断到初始附加中的目标进程.

使用APC,也许可"说服"现有线程加载我们的DLL.这要隐蔽得多,因为它是现有线程加载DLL,这非常常见.为此,可用通用的QueueUserAPC,API,这里:

DWORD QueueUserAPC(PAPCFUNC  pfnAPC,HANDLE    hThread,ULONG_PTR dwData
);

幸好,APC函数有与线程函数相同的二进制布局,再次,接收某种指针.主要问题目标线程可能不会进入可警告的等待.

为了增加成功概率,可在目标进程中排队所有线程的APC,只需要一个线程即可进入可警告的等待.这对像资管此类有很多线程的进程效果很好,几乎总是可工作,视频.

自然队列

最后,因为在队列中保存APC,因此只需使用APC就可非常自然地创建一个"工作队列".如果需要顺序调用函数队列,可借助C++中的std::queue<>自行管理它们.

但是该队列不是线安的,因此你必须正确保护它.如果使用的是.NET,则可用ConcurrentQueue<>来帮助同步,但仍要构建某种循环弹出项目,调用它们等.
有了APC,一切都自然而简单:

void WorkQueue(HANDLE hQuitEvent) {while(::WaitForSingleObjectEx(hQuitEvent, INFINITE, TRUE) != WAIT_OBJECT_0);
}

简单自身.可用事件对象来退出此无限循环(从某处调用的SetEvent).线程等待APC出现在其队列中,并在出现时运行它们,返回等待.
这里
此队列的客户调用QueueUserAPC在该线程中入队工作项(回调).就是这样,简单而优雅.

http://www.dtcms.com/a/453622.html

相关文章:

  • 网站建设代码流程花店网站建设个人小结
  • 德阳建设公司网站网站制作里的更多怎么做
  • HandBrake:视频压缩工具
  • 建设部门的网站wordpress图片批量上传插件下载
  • 致远OA配置HTTPS访问避坑帖
  • 快速搭建网站视频wordpress托管在哪里
  • AssemblyScript 入门教程(5):深入理解 TypedArray
  • 【PCB电路设计】常见元器件简介(电阻、电容、电感、二极管、三极管以及场效应管)
  • STM32G474单片机开发入门(六)定时器TIMER详解及实战含源码
  • C++进阶(9)——智能指针的使用及其原理
  • 个人写HTOS移植shell
  • 【开发工具】Windows1011远程Ubuntu18及以上桌面
  • 输入法网站设计怎么自己制作图片
  • STM32 Flash 访问加速器详解(ART Accelerator)
  • stm32 freertos下基于hal库的模拟I2C驱动实现
  • 成都微网站访问wordpress速度慢
  • 意识形态网站建设怎么做网络平台
  • LangChain部署RAG part1(背景概念)(赋范大模型社区公开课听课笔记)
  • 模块化html5网站开发本地网站后台管理建设
  • 在源码之家下载的网站模板可以作为自己的网站吗资讯网站的好处
  • AI - 自然语言处理(NLP) - part 1
  • 从零开始的C++学习生活 5:内存管理和模板初阶
  • 黔东南购物网站开发设计canvas网站源码
  • 为网站做IPhone客户端网站建设中 模板
  • 网站备案可以做电影网站吗厦门建筑信息网
  • 浦东做网站公司中国企业500强出炉
  • 白话大模型评估:文本嵌入与文本生成模型评估方法详解
  • 广州网站制作开发公司哪家好高德地图加拿大能用吗
  • 网站自助建设平台百度网页设计论文题目什么样的好写
  • 小米系耳机配对方法