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

想学网络营销网站建设品牌网站品牌理念老旧的后果

想学网络营销网站建设,品牌网站品牌理念老旧的后果,大学网站建设论文,做一个网站先做前段 还是后端#xff08;40#xff09;用 thread 类 或全局 async (…) 函数#xff0c;创建新线程时#xff0c;谁才是在新线程里第一个被执行的函数#xff1f; 弄清楚这个问题#xff0c;有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async #xff08;…#xff0…40用 thread 类 或全局 async (…) 函数创建新线程时谁才是在新线程里第一个被执行的函数 弄清楚这个问题有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async …函数的源码实现得到的结论是各个线程拥有独立的栈空间来执行函数存储函数的局部变量。但各个线程共用进程的堆空间。所以通过指向堆区的指针各个线程之间可以实现数据的传递与共享。其实在堆区保存的是 tuple 元组该 tuple 可以保存各种类型的数据函数与其参数。新线程中启动的 c 全局函数 invoke… 会解析该 tuple 元组并调用里面的函数。从而把咱们程序员指定的函数在新线程中运行起来。下面根据源代码举例说明。 41 thread 类的创建新线程流程 以下也给出其源码版 template class _Fn, class... _Args, enable_if_t!is_same_v_Remove_cvref_t_Fn, thread, int 0 thread(_Fn _Fx, _Args... _Ax) { _Start( forward_Fn(_Fx), forward_Args(_Ax)...); }template class _Fn, class... _Args void _Start(_Fn _Fx, _Args... _Ax) {using _Tuple tupledecay_t_Fn, decay_t_Args...;auto _Decay_copied make_unique_Tuple(forward_Fn(_Fx), forward_Args(_Ax)...);auto _Invoker_proc _Get_invoke_Tuple(make_index_sequence1 sizeof...(_Args){});// u_long _beginthreadex( void* security, u_long stack_size, u_long (* start_address)(void*), _Thr._Hnd reinterpret_castvoid*( //void* arglist, u_long initflag, u_long* thrdaddr ); _CSTD _beginthreadex(nullptr, 0, _Invoker_proc, _Decay_copied.get(), 0, _Thr._Id)); }template class _Tuple, size_t... _Indices // 本函仅仅是返回上面的函数的地址 static auto _Get_invoke(index_sequence_Indices...) { return _Invoke_Tuple, _Indices...; }template class _Tuple, size_t... _Indices static unsigned int _Invoke(void* _RawVals) { // 先把形参的 void* 指针转换为有意义的指针类型unique_ptr_Tuple _FnVals(static_cast_Tuple*(_RawVals)); _Tuple _Tup *_FnVals;_STD invoke(_STD move(_STD get_Indices(_Tup))...); return 0; } 42创建新线程还有另一种方式就是使用 async…函数。这种方式创建新线程又是哪一个函数最先被执行呢 这里再给出代码版本 template class _Ret, class... _ArgTypes class _Packaged_state_Ret (_ArgTypes...) : public _Associated_state_Ret* { private: function_Ret (_ArgTypes...) _Fn; // 包含了一个 function 对象以容纳各种可调用对象 public : template class _Fty2 // 有参构造函数_Packaged_state(_Fty2 _Fnarg) : _Fn(_STD forward_Fty2(_Fnarg)) {}void _Call_immediate(_ArgTypes... _Args) {this-_Set_value( addressof( _Fn( forward_ArgTypes(_Args)...) ), false);} };template class _Rx class _Task_async_state : public _Packaged_state _Rx() { // 此处指明了封装的函数类型 R() private: ::Concurrency::taskvoid _Task; // 这是要新建线程对象 public : using _Mybase _Packaged_state_Rx(); // 简写父类同时指出被调函数是无参函数template class _Fty2 // 有参构造函数_Task_async_state(_Fty2 _Fnarg) : _Mybase(_STD forward_Fty2(_Fnarg)) { _Task ::Concurrency::create_task( [this]() { this-_Call_immediate(); } );} };//*************************************************************************************************template class _Ret, class _Fty _Associated_statetypename _P_arg_type_Ret::type* // 返回值 _Get_associated_state(launch _Psync, _Fty _Fnarg) {switch (_Psync) {case launch::async: default : return new _Task_async_state_Ret(_STD forward_Fty(_Fnarg)); } } // 模板参数 _Fty 就是 _Fake_no_copy_callable_adapterT... 类型,包含被调函数及其实参的 tuple 元组template class _Fty, class... _ArgTypes future_Invoke_result_tdecay_t_Fty, decay_t_ArgTypes... // 函数返回值 async(launch _Policy, _Fty _Fnarg, _ArgTypes... _Args) { // 简写函数的返回值类型并对函数的返回值的类型进行必要的转换。using _Ret _Invoke_result_tdecay_t_Fty, decay_t_ArgTypes...; using _Ptype typename _P_arg_type_Ret::type; _Promise_Ptype _Pr(_Get_associated_state_Ret(_Policy,_Fake_no_copy_callable_adapter_Fty, _ArgTypes...( forward_Fty(_Fnarg), forward_ArgTypes(_Args)...)));return future_Ret(_Pr._Get_state_for_future(), _Nil()); } // 调用了 future 的某版本的构造函数//**************************************************************************************************************template class... _Types // 本类型是一个可调用对象 class _Fake_no_copy_callable_adapter //核心是包括了一个 tuple 元组 { public: using _Storaget tupledecay_t_Types...; mutable _Storaget _Storage;_Fake_no_copy_callable_adapter(_Types... _Vals) : _Storage( forward_Types(_Vals)...) {}auto operator()() - decltype(_Invoke_stored( move( declval_Storaget()) ) ){ return _Invoke_stored(_STD move(_Storage)); } };template class... _Types auto _Invoke_stored(tuple_Types... _Tuple) // invoke() a tuple - decltype(_Invoke_stored_explicit(_STD move(_Tuple), index_sequence_for_Types...{})) { return _Invoke_stored_explicit(_STD move(_Tuple), index_sequence_for_Types...{}); }template class... _Types, size_t... _Indices // invoke() a tuple with explicit parameter ordering auto _Invoke_stored_explicit(tuple_Types... _Tuple, index_sequence_Indices...) - decltype(_STD invoke(_STD get_Indices(_STD move(_Tuple))...)) { return _STD invoke(_STD get_Indices(_STD move(_Tuple))...); } 43 谢谢
http://www.w-s-a.com/news/453743/

相关文章:

  • 单位做网站有哪些功能型类的网站
  • 网站怎样做优惠卷移动互联网开发培训
  • 重庆网站建设帝维科技网站做定向的作用
  • 网站建设工作室wp主题模板做污事网站
  • 网站建设 深圳 凡科重庆家居网站制作公司
  • 自己也可以免费轻松创建一个网站企业收录网站有什么用
  • 帮别人做网站违法导航网站开发工具
  • seo网站外包公司字画价格网站建设方案
  • 网站国内空间价格销售技巧
  • 广安建设企业网站qq互联网站备案号
  • 京东网站建设的要求vs2010做的网站
  • wordpress 新闻杂志主题佛山企业网站排名优化
  • 选服务好的网站建设金华市开发区人才网
  • 广州建站商城南阳高质量建设大城市网站
  • 网站建设合同封面模板做代炼的网站
  • 外贸网站建站要多少钱南昌优化排名推广
  • 做公司网站的尺寸一般是多大企业管理网站
  • 苏州网站设计公司兴田德润i简介做签证宾馆订单用啥网站
  • 网站页面设计工具做网站租空间
  • 做智能网站系统百度提交入口
  • 网站建设代理商电话网站规划和建设方案
  • 双桥区网站制作seo 首页
  • 电子商务网站建设前期准备wordpress域名指向二级目录
  • 汕头建站网站模板淮北做网站电话
  • 手机做logo用什么网站服务器安全防护
  • 课程分销的网站怎么做北京企业网站建设方案
  • 吴兴区建设局网站湖北企业网站建设
  • 网页与网站的区别是什么2023年8月份新冠
  • 唐山网站建设外包公司安卓手机怎么搭建网页
  • 国内做网站最大的公司计量检测网站平台建设方案