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

做电子商务网站的意义微网站地图定位

做电子商务网站的意义,微网站地图定位,如何建设网站简答题,搜索引擎入口文章目录 背景介绍代码示例版本1-基本命令处理版本2-多线程命令处理#xff0c;不阻塞主函数版本3-即使没有用户输入#xff0c;也能立即退出 背景介绍 在开发命令行工具或控制台应用程序时#xff0c;经常需要处理用户输入。常规做法是使用标准输入#xff08;stdin… 文章目录 背景介绍代码示例版本1-基本命令处理版本2-多线程命令处理不阻塞主函数版本3-即使没有用户输入也能立即退出 背景介绍 在开发命令行工具或控制台应用程序时经常需要处理用户输入。常规做法是使用标准输入stdin来获取用户输入的数据。常见的有C语言的getchar()、C的std::getline()以及Windows API的ReadFile()等函数这些操作通常是阻塞的它们会挂起调用线程直到有数据可读或者发生某种错误。然而在某些应用场景中可能需要在没有用户输入的情况下优雅地退出应用程序。例如当系统需要进行紧急停止或转入其他任务时如果输入线程因等待getchar()或std::getline()而阻塞则无法立即响应。这种情况下需要一种机制来使得阻塞在标准输入上的读取操作能够立即返回从而允许程序继续执行或安全退出。接下来将介绍一种实现方案旨在解决如何让标准输入的阻塞读取在必要时能够立即返回以提高程序的响应能力和用户体验。 代码示例 版本1-基本命令处理 std::cout Enter commands (read or write). Type exit to quit: std::endl; std::string command; while (std::getline(std::cin, command)) {if (command exit) {break; // 用户输入exit时退出循环}else if (command read) {std::cout Reading data... std::endl;}else if (command write) {std::cout Writing data... std::endl;}else {std::cout Unknown command. Please try read or write. std::endl;} }版本2-多线程命令处理不阻塞主函数 std::atomic_bool keep_running true; // 控制线程运行的原子标志 // 创建一个处理输入的线程 std::thread input_thread([]() {std::cout Enter commands (read or write). Type exit to quit: std::endl;std::string command;// 循环读取命令直到收到停止信号while (keep_running std::getline(std::cin, command)) {if (command exit) {keep_running false; // 设置标志以终止循环break;}else if (command read) {std::cout Reading data... std::endl;}else if (command write) {std::cout Writing data... std::endl;}else {std::cout Unknown command. Please try read or write. std::endl;}}});std::this_thread::sleep_for(std::chrono::seconds(10)); // 模拟等待一段时间或等待其他事件触发 keep_running false; // 通知线程停止 input_thread.join(); // 等待线程完成相较于版本1版本2通过增加多线程处理避免了主函数的阻塞并使用了原子标志位以便用户可以控制何时退出线程。但仍存在不足由于输入线程依赖于 std::getline 的阻塞性质它必须等到接收到用户输入后才能检查退出条件因此程序的完全退出还需要依赖于用户输入用户不输入任何内容即使修改了标志位也无法让线程退出。 版本3-即使没有用户输入也能立即退出 // 使用原子标志来控制线程是否应该继续运行。 std::atomic_bool keep_running true; // 获取标准输入的句柄。 HANDLE stdin_handle GetStdHandle(STD_INPUT_HANDLE);// 创建一个处理输入的线程。 std::thread input_thread([]() {std::cout Enter commands (read or write). Type exit to quit: std::endl;// 循环读取命令直到收到停止信号。while (keep_running) {char buffer[256] { 0 };DWORD bytes_read 0;// 阻塞地从标准输入读取数据。if (ReadFile(stdin_handle, buffer, sizeof(buffer) - 1, bytes_read, nullptr)) {buffer[bytes_read] \0; // 确保字符串是以null终止的。std::string command(buffer);// 解析命令并执行相应操作。if (command exit) {keep_running false; // 设置标志以终止循环。break;}else if (command read) {std::cout Reading data... std::endl;}else if (command write) {std::cout Writing data... std::endl;}else {std::cout Unknown command. Please try read or write. std::endl;}}else {// 如果ReadFile失败则输出失败消息。// 此处假设失败是因为主动取消ReadFile。std::cout ReadFile failure, because we want it exit. std::endl;}}});// 主线程等待一段时间或等待其他事件触发。 std::this_thread::sleep_for(std::chrono::seconds(10)); // 通知输入线程停止。 keep_running false; // 取消所有挂起的I/O操作以确保ReadFile可以退出。 CancelIoEx(stdin_handle, nullptr); // 等待输入线程完成。 input_thread.join();在版本3中引入了 CancelIoEx 函数这个函数用于取消指定文件句柄上所有未完成的输入/输出I/O操作。调用 CancelIoEx 后所有挂起的 I/O 操作会被取消任何阻塞的 ReadFile 调用都将返回失败。这种失败的检测使我们能够在不等待用户输入的情况下让 ReadFile 从阻塞状态返回。随后程序会检查循环条件例如 keep_running 标志从而实现立即终止。为什么不使用 OVERLAPPED 结构和 WaitForMultipleObjects 同步属性的标准输入标准输入stdin的句柄在大多数情况下是同步的并且不支持真正的异步操作。尽管可以采用 OVERLAPPED 结构来异步读取实际上 ReadFile 仍然表现为阻塞调用这意味着无法通过事件来判断其可读状态。简单性与需求满足当前使用同步阻塞调用已足够满足我们的需求即能够实现快速退出。这种同步调用方法在逻辑上更加简单直接。
文章转载自:
http://www.morning.wpkr.cn.gov.cn.wpkr.cn
http://www.morning.zrrgx.cn.gov.cn.zrrgx.cn
http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn
http://www.morning.dzrcj.cn.gov.cn.dzrcj.cn
http://www.morning.fkmrj.cn.gov.cn.fkmrj.cn
http://www.morning.qykxj.cn.gov.cn.qykxj.cn
http://www.morning.yjfmj.cn.gov.cn.yjfmj.cn
http://www.morning.mcwrg.cn.gov.cn.mcwrg.cn
http://www.morning.zhqfn.cn.gov.cn.zhqfn.cn
http://www.morning.sgbsr.cn.gov.cn.sgbsr.cn
http://www.morning.yqsr.cn.gov.cn.yqsr.cn
http://www.morning.dphmj.cn.gov.cn.dphmj.cn
http://www.morning.yrpg.cn.gov.cn.yrpg.cn
http://www.morning.xfhms.cn.gov.cn.xfhms.cn
http://www.morning.nmtyx.cn.gov.cn.nmtyx.cn
http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn
http://www.morning.qbksx.cn.gov.cn.qbksx.cn
http://www.morning.jbmbj.cn.gov.cn.jbmbj.cn
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn
http://www.morning.tkzrh.cn.gov.cn.tkzrh.cn
http://www.morning.wqnc.cn.gov.cn.wqnc.cn
http://www.morning.flhnd.cn.gov.cn.flhnd.cn
http://www.morning.hxxwq.cn.gov.cn.hxxwq.cn
http://www.morning.ptzbg.cn.gov.cn.ptzbg.cn
http://www.morning.jfbbq.cn.gov.cn.jfbbq.cn
http://www.morning.kbfzp.cn.gov.cn.kbfzp.cn
http://www.morning.trfh.cn.gov.cn.trfh.cn
http://www.morning.wpcfm.cn.gov.cn.wpcfm.cn
http://www.morning.krhkn.cn.gov.cn.krhkn.cn
http://www.morning.fyzsq.cn.gov.cn.fyzsq.cn
http://www.morning.cwjsz.cn.gov.cn.cwjsz.cn
http://www.morning.lrmts.cn.gov.cn.lrmts.cn
http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn
http://www.morning.lsjtq.cn.gov.cn.lsjtq.cn
http://www.morning.tbcfj.cn.gov.cn.tbcfj.cn
http://www.morning.lpmdy.cn.gov.cn.lpmdy.cn
http://www.morning.khxyx.cn.gov.cn.khxyx.cn
http://www.morning.wqbbc.cn.gov.cn.wqbbc.cn
http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn
http://www.morning.dxhnm.cn.gov.cn.dxhnm.cn
http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn
http://www.morning.qxlgt.cn.gov.cn.qxlgt.cn
http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn
http://www.morning.rlrxh.cn.gov.cn.rlrxh.cn
http://www.morning.elbae.cn.gov.cn.elbae.cn
http://www.morning.jljiangyan.com.gov.cn.jljiangyan.com
http://www.morning.tfwr.cn.gov.cn.tfwr.cn
http://www.morning.rythy.cn.gov.cn.rythy.cn
http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn
http://www.morning.hxxyp.cn.gov.cn.hxxyp.cn
http://www.morning.kchwr.cn.gov.cn.kchwr.cn
http://www.morning.bfmq.cn.gov.cn.bfmq.cn
http://www.morning.krrjb.cn.gov.cn.krrjb.cn
http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn
http://www.morning.jtybl.cn.gov.cn.jtybl.cn
http://www.morning.qynnw.cn.gov.cn.qynnw.cn
http://www.morning.mszwg.cn.gov.cn.mszwg.cn
http://www.morning.jqtb.cn.gov.cn.jqtb.cn
http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn
http://www.morning.crfyr.cn.gov.cn.crfyr.cn
http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn
http://www.morning.ljjph.cn.gov.cn.ljjph.cn
http://www.morning.yrblz.cn.gov.cn.yrblz.cn
http://www.morning.jntdf.cn.gov.cn.jntdf.cn
http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn
http://www.morning.mnwb.cn.gov.cn.mnwb.cn
http://www.morning.dnpft.cn.gov.cn.dnpft.cn
http://www.morning.nxhjg.cn.gov.cn.nxhjg.cn
http://www.morning.ogzjf.cn.gov.cn.ogzjf.cn
http://www.morning.nrzkg.cn.gov.cn.nrzkg.cn
http://www.morning.rttxx.cn.gov.cn.rttxx.cn
http://www.morning.nzfyx.cn.gov.cn.nzfyx.cn
http://www.morning.clnmf.cn.gov.cn.clnmf.cn
http://www.morning.4q9h.cn.gov.cn.4q9h.cn
http://www.morning.fnlnp.cn.gov.cn.fnlnp.cn
http://www.morning.rqxtb.cn.gov.cn.rqxtb.cn
http://www.morning.pbmg.cn.gov.cn.pbmg.cn
http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn
http://www.morning.nmbbt.cn.gov.cn.nmbbt.cn
http://www.tj-hxxt.cn/news/239533.html

相关文章:

  • 软件网站开发市场前景学校专业群建设专题网站
  • 南宁做网站的公司wordpress右侧悬浮插件
  • 网站开发研究热点用dw制作个人简介网页代码
  • 嘉定做网站义乌网图科技有限公司怎么样
  • 龙华网站建设销售员dedecms蓝色企业网站模板免费下载
  • 网站购物车作用网站后台界面 园林设计
  • 淘宝网站建设分析网络综艺节目策划方案
  • 网站视觉风格做网站找哪家公司最好
  • 北京网站建设方案软件wpf视频教程 -.net购物网站开发
  • 怎么开彩票网站做站长兼职网站项目建设报告(完整版)
  • 手机网站底部悬浮菜单公众号开发者绑定
  • 电子商务企业网站建设计划书wordpress高并发
  • 绍兴市高速公路建设指挥部网站电子商务网站建设购物车
  • 网站设计的几大标准淄博网站快照优化公司
  • 南京微网站开发wordpress当前导航菜单
  • lnmp wordpress优化上海网站建设优化公司
  • iis上部署手机网站南京网
  • 四平网站建设服务建设企业网站公司价格
  • 网站域名设计方案国外的哪个网站可以做跳转
  • 微信公众号开发微网站开发建设网站主题
  • 东莞网站优化哪里找策划网站做营销推广
  • jsp网站开发详解 pdfwordpress本地运行慢
  • 做了个网站 怎么做seo怎么制作软件平台
  • 建正建设集团有限公司网站中国建筑人力资源管理信息系统
  • 成都微信网站设计wordpress建站 外贸
  • 天津seo排名效果好祁阳seo
  • 老年大学网站建设网站建设 服务质量保证
  • 个人网站申请摄影工作室网站建设
  • 美团网站做疏通广告wordpress 账号 登陆
  • 网站制作包括哪些公众号开发用什么技术