过桥问题动画显示(多线程,简陋版)

2023-05-16

Code:
  1. #include<windows.h>   
  2. #include<iostream.h>   
  3. #include<stdio.h>   
  4. void gotoxy(int x,int y)     
  5. {   
  6.     COORD c;   
  7.     c.X=x;   
  8.     c.Y=y;   
  9.     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);   
  10. }   
  11.   
  12. /*四个信号量,东,西方向信号量,东,西段互斥信号量,用信号量控制过桥的对象,同时过桥的对象仅且  
  13. 只有两个,并且不能同向,多个线程用同一个线程入口函数*/  
  14.   
  15. HANDLE hE_Dir;  //从西往东信号量   
  16. HANDLE hW_Dir; //从西往东信号量    
  17. HANDLE hE_Mutex; //西段线程间的互斥   
  18. HANDLE hW_Mutex;  //东段线程互斥   
  19.   
  20. DWORD WINAPI EtoW1_Proc(LPVOID lpParameter);//东到西边线程   
  21.   
  22. DWORD WINAPI WtoE1_Proc(LPVOID lpParameter);//西到东边线程   
  23.   
  24.   
  25. void bridge();  //创建过桥函数   
  26. int i;   
  27. int j;   
  28. int time1=100,time2=300;   
  29. BOOL E_Release;   
  30. BOOL W_Release;   
  31.   
  32. int main()   
  33. {   
  34.     bridge();  //桥型   
  35.     gotoxy(12,12);  //光标第一次到(12,12)   
  36.      //各个互斥信号量   
  37.     hE_Dir = CreateMutex(NULL,FALSE,NULL);      
  38.     hW_Dir = CreateMutex(NULL,FALSE,NULL);   
  39.     hE_Mutex = CreateMutex(NULL,FALSE,NULL);   
  40.     hW_Mutex = CreateMutex(NULL,FALSE,NULL);   
  41.     //线程创建   
  42.     HANDLE hThread1,hThread2;   
  43.     hThread1=CreateThread(NULL,0,WtoE1_Proc,NULL,0,NULL);   
  44.     hThread2=CreateThread(NULL,0,EtoW1_Proc,NULL,0,NULL);   
  45.     CloseHandle(hThread1);   
  46.     CloseHandle(hThread2);   
  47.   
  48.   
  49.   
  50.        
  51.     Sleep(200000);  //主线程沉睡200秒   
  52.   
  53.     return 0;   
  54. }   
  55.   
  56. //西到东边线程   
  57. DWORD WINAPI WtoE1_Proc(LPVOID lpParameter)   
  58. {   
  59.     while(TRUE)   
  60.     {   
  61.   
  62.         WaitForSingleObject(hE_Dir,INFINITE);   //从西到东互斥   
  63.         WaitForSingleObject(hE_Mutex,INFINITE); //进入西段,互斥   
  64.         gotoxy(12,12);   
  65.         for(i=14;i<=34;i++)   
  66.         {   
  67.             gotoxy(i,12);   
  68.             time1=(time1+180)%500;   //随机速度   
  69.             Sleep(time1);   
  70.             gotoxy(i,12);//切换线程后,回到原地   
  71.             printf("☆");   
  72.             //gotoxy(i,12);   
  73.         }   
  74.   
  75.         W_Release = ReleaseMutex(hE_Mutex); //离开西段   
  76.         if(W_Release)/*判断谁先到,先到等1秒钟*/ Sleep(1000);   //到中间区域休息,等待另一方到来   
  77.         gotoxy(i,12);   
  78.         printf(" ");   
  79.         gotoxy(34,11);   
  80.         printf("☆");   
  81.         Sleep(100);   
  82.         gotoxy(34,11);   
  83.         printf("");   
  84.         gotoxy(35,11);   
  85.         printf("☆");   
  86.         Sleep(100);   
  87.         gotoxy(35,11);   
  88.         printf(" ");   
  89.   
  90.         WaitForSingleObject(hW_Mutex,INFINITE);    //进入东段,互斥   
  91.   
  92.         for(i=35;i<=56;i++)   
  93.         {   
  94.             gotoxy(i,12);   
  95.             Sleep(90);   
  96.             gotoxy(i,12);   
  97.             printf("☆");   
  98.             gotoxy(i,12);   
  99.         }   
  100.         gotoxy(i,12);   
  101.         printf(" ");   
  102.         ReleaseMutex(hW_Mutex);     //解开东段互斥   
  103.         //ReleaseMutex(hE_Mutex);   
  104.     }   
  105. //  return 0;   
  106. }   
  107.   
  108. //东到西边线程   
  109. DWORD WINAPI EtoW1_Proc(LPVOID lpParameter)   
  110. {   
  111. while(TRUE)   
  112.     {   
  113.   
  114.         WaitForSingleObject(hW_Dir,INFINITE);   //从东到西互斥   
  115.         WaitForSingleObject(hW_Mutex,INFINITE); //进东段 ,互斥   
  116.          
  117.         gotoxy(56,12);   
  118.         for(j=54;j>=36;j--)   
  119.         {   
  120.             gotoxy(j,12);   
  121.             time2=(time2+80)%500;   
  122.             Sleep(time2);     
  123.             gotoxy(j,12);  //切换线程后,回到原地   
  124.             printf("★");   
  125.             gotoxy(j,12);   
  126.         }   
  127.            
  128.         E_Release = ReleaseMutex(hW_Mutex);   //离开东段,   
  129.         if(E_Release) Sleep(1000);   
  130.         gotoxy(j+1,12);   
  131.         printf(" ");   
  132.         gotoxy(36,13);   
  133.         printf("★");   
  134.         Sleep(100);   
  135.         gotoxy(36,13);   
  136.         printf("");   
  137.         gotoxy(35,13);   
  138.         printf("★");   
  139.         Sleep(100);   
  140.         gotoxy(35,13);   
  141.         printf(" ");   
  142.         gotoxy(34,13);   
  143.         printf("★");   
  144.         Sleep(100);   
  145.         gotoxy(34,13);   
  146.         printf(" ");   
  147.   
  148. WaitForSingleObject(hE_Mutex,INFINITE);//进入西段,互斥   
  149.   
  150.         for(j=32;j>=12;j--)   
  151.         {   
  152.             gotoxy(j,12);   
  153.             Sleep(100);   
  154.             gotoxy(j,12);   
  155.             printf("★");   
  156.         }   
  157.         gotoxy(j+1,12);   
  158.         printf(" ");   
  159.           ReleaseMutex(hE_Mutex);//离开西段段   
  160.            
  161.     }   
  162. return 0;   
  163. }   
  164.   
  165.   
  166. void bridge()   
  167. {   
  168.     //☆   █   ★   //   
  169.     ///创建小桥//   
  170.     gotoxy(20+10,8);                                                //8行30列    
  171.     printf("█████");     
  172.     gotoxy(20+10,9);                                                //9行30列   
  173.     printf("█      █");      
  174.     gotoxy(20+10,10);                                               //10行30列   
  175.     printf("█      █");   
  176.     gotoxy(4+10,11);                                                //11行14列   
  177.     printf("█████████      █████████");   
  178.     gotoxy(4+10,13);                                               //13行14列   
  179.     printf("█████████      █████████");   
  180.     gotoxy(20+10,14);                                               //14行30列   
  181.     printf("█      █");   
  182.     gotoxy(20+10,15);                                               //15行30列   
  183.     printf("█      █");   
  184.     gotoxy(20+10,16);                                                //16行30列   
  185.     printf("█████");   
  186.        
  187.     //gotoxy(56,12);   //右边起始点   
  188.     //printf("★");   
  189.     //gotoxy(13,12);    //左边起始点   
  190.     //printf("☆");   
  191.     //          右边中间        gotoxy(38,12);    
  192.     //          左边中间        gotoxy(30,12);   
  193. //   
  194. }  

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过桥问题动画显示(多线程,简陋版) 的相关文章

  • halcon edges_image算子分析

    edges image Image ImaAmp ImaDir Filter Alpha NMS Low High xff1a 使用Deriche Lanser Shen或者Canny 滤波器进行边缘提取 参数 xff1a Image xf
  • C# NModbus的主从站开发以及Modbus Slave、Modbus Poll工具的使用

    NModbus的主站开发 1 开发环境要求 xff1a PC端作为主站 xff0c 控制器作为从站 2 PC端初始化代码 xff1a serialPort 61 new SerialPort serialPort PortName 61 3
  • OpenCVSharp Mat.Set<T>修改像素颜色

    笔记 xff1a Mat Set lt T gt 方法修改图像中的颜色 xff0c T的类型不能是Scalar 应为Vec3b xff0c 否则颜色修改失败 C 代码 xff1a Mat labs 61 new Mat int counts
  • VSCode idea 配置xml文件的dtd约束文件

    如上图配置XML文件的智能提示功能通过dtd文件 xff1a 1 通过VSCode 的扩展功能下载XML插件 xff08 注意 xff1a 插件内是包含dtd文件配置功能 xff09 配置方式 xff1a 1 DOCTYPE xff1a l
  • 关于0xAA和0x55

    许多串口通讯中测试或握手信号使用AA或55这两个特殊的十六进制数 xff0c 在许多PIC内部的 EEPROM 改写也使用这两个数作为敲门砖 xff0c 初学者可能不解何为 xff0c 其实如果将这两个数展开成二进制就可明白为什么 xff1
  • APS .Net MVC 之APIController与Controller的区别

    APIControllerController开发模式WebAPIMVC命名空间System Web HttpSystem Web Mvc返回方式json text或者xml texthtml textaction的默认请求方式postpo
  • DBeaver连接informix数据库乱码

    在工具栏选择数据库 驱动管理 informix编辑 xff0c 示例URL中添加NEWCODESET 61 utf8 8859 1 819 CLIENT LOCALE 61 en US utf8 DB LOCALE 61 en US 885
  • c语言——http编程

    HTTP协议简介 超文本传输协议是一种用于分布式 协作式和超媒体信息系统的应用层协议 HTTP是一个客户端终端 xff08 用户 xff09 和服务器端 xff08 网站 xff09 请求和应答的标准 xff08 一般基于TCP xff09
  • 串口开发之环形缓冲区

    01 简介 串口的基本应用 xff0c 使用串口中断接收数据 xff0c 串口中断发送回包 xff08 一般可以使用非中断形式发送回包 xff0c 在数据接收不频繁的应用中 串口接收中断保证串口数据及时响应 xff0c 使用非中断方式发送回
  • stl中的智能指针类详解

    C 43 43 98 03的尝试 std xff1a xff1a auto ptr C 43 43 11标准废弃了std xff1a xff1a auto ptr xff08 在C 43 43 17标准中被移除 xff09 xff0c 取而
  • 对于ROS的工作空间的理解(一)

    对于每一个任务 xff0c 可以在根目录下为它分配一个工作空间 mkdir p catkin ws src xff08 src 源码 xff09 cd catkin ws catkin make 编译 xff0c 生成devel xff08
  • stc-isp协议

    一 数据封装格式 包头 标示 数据包长度 命令字 内容 校验 包尾 1 包头 xff1a 2字节 xff0c 固定为 xff1a 0x46 xff0c 0xB9 2 标示 xff1a 1字节 xff0c 分两种 xff0c ARM发给MCU
  • 干货!串口通讯的起始、数据、停止位都是怎么分配的?

    串口是串行接口 xff08 serial port xff09 的简称 xff0c 也称为串行通信接口或COM接口 串口通信是指采用串行通信协议 xff08 serial communication xff09 在一条信号线上将数据一个比特
  • Linux 下char转换为wchar_t(窄字符转换位宽字符)

    LInux下使用mbstowcs函数可以将char转化为wchar t 函数含义 xff1a convert a multibyte string to a wide char string 说明 xff1a The behaviour o
  • Linux服务器 安装Pytorch GPU版本

    实验室服务器重做系统之后 xff0c 之间搭建的Python环境已甚嚣尘上 xff0c 只好从头再来 但是过程中遇到很多莫名其妙的bug xff0c 特此立章记录 xff0c 望对他人有所帮助 作为一个深度学习的初学者 xff0c 个人对所
  • 鼠标悬停效果 PPT制作

    鼠标悬停效果实现 在制作PPT时 xff0c 有时候需要实现鼠标的悬停效果 xff0c 即将鼠标放置在某个按钮或图片上 xff0c 实现动态变化的效果 目标是 xff1a 当鼠标悬停在一些人物名字上时 xff0c 出现该人物的个人信息 具体
  • 谷歌学术——下载论文

    一些同学在找论文的时候 xff0c 在学校数据库找不到 xff0c 因此可以使用谷歌学术来找 但是国内被墙了 xff0c 无法访问 xff0c 所以可以使用镜像服务器 首先进入谷歌镜像 xff1a 镜像网站 xff08 https ac s
  • Ubuntu 22.04 安装vm-tools

    安装过程一路心酸 xff0c 大家慎重 在Vmware中新建虚拟机之后 xff0c 发现没有办法传输文件和进行随窗口的视图变化 xff0c 打算安装vm tools 但是在Ubuntu 22 04 中 xff0c 如果使用Vmware自带的
  • LD文件 详解

    ld 组合了许多对象文件和归档文件 xff0c 重新定位它们的数据并绑定符号引用 通常编译程序的最后一步是运行 ld 每个可加载或可分配的输出节都有两个地址 第一个是 VMA xff0c 即虚拟内存地址 这是运行输出文件时该节所拥有的地址
  • 【Linux0.11 源码历险记 2】《保护模式》

    继续跟着stup s 来看 xff1a lidt idt 48 load idt with 0 0 lgdt gdt 48 load gdt with whatever appropriate idt 48 word 0 idt limit

随机推荐

  • 【Linux0.11 源码历险记 3】《开启分页》

    下面我们就正式进入head s 的代码 xff1a text globl idt gdt pg dir tmp floppy area pg dir startup 32 movl 0x10 eax mov ax ds mov ax es
  • HttpClient使用HttpGet进行json数据传输

    JSON字符串需要用urlencoding编码对绝大多数HTTP client而言 xff0c URL长度都有上限 xff0c 所以不能传太大的JSON xff0c 一般而言几K应该没问题 xff0c 但是再长点就不好说了 import j
  • 【Linux 内核技术】RCU

    在阅读linux 3 10版本的socket 一节源码时 xff0c 遇到了一个 span class token function rcu dereference span span class token punctuation spa
  • 选择题改错

    一 单选 1 2 以下程序的运行结果是 xff08 xff09 int main void printf 34 s 5 3s n 34 34 computer 34 34 computer 34 return 0 A A computer
  • 安装程序的安装界面为乱码的问题

    有的时候程序的安装界面为乱码 xff0c 多出在msi程序中 xff0c 这其实是AppLocale的bug导致的 xff0c 解决的办法不用删除AppLocale xff0c 只需要到c windows AppPatch下 xff0c 删
  • 周星馳 電影經典對白

    周星馳 電影經典對白 http www jd bbs com viewthread php tid 61 1209979 amp extra 61 page 3D1 1 曾經有一份真誠的愛擺在我的面前 xff0c 但是我沒有珍惜 xff0c
  • Eclipse环境搭建

    Eclipse 环境搭建 C 43 43 还没有写完 xff5e xff5e xff5e xff5e 最近 xff0c 在作一个项目 xff0c 要求所有的软件 xff0c 包括操作系统 开发工具 等 xff0c 所有的软件都要使用正版的
  • 为什么要学习python

    时隔多年以后 xff0c 我又回归CSDN了 xff0c 回来学习学习 刚开始工作的时候 xff0c 在CSDN这里找各种资源 xff0c 各种学习 xff0c 请教 xff0c 等等 xff0c 确实学到了不少 也许是因为自己是做嵌入式开
  • 汇编

    hu bi n 1 动词 xff0c 把资料或文章等编辑在一起 2 名词 xff0c 编辑在一起的资料 xff0c 文献 汇编简介 汇编语言 Assembly Language 是面向机器的程序设计语言 汇编语言中 xff0c 用助记符 M
  • 杨石头智立方47:你我都必须学习的十大管理原则

    http blog sina com cn s blog 4ce6ecc60100fy5v html tj 61 1 一 素养 蓝斯登原则 xff1a 在你往上爬的时候 xff0c 一定要保持梯子的整洁 xff0c 否则你下来时可能会滑倒
  • Media change: lase insert the disc labled

    在Debian中使用apt get安装软件包时经常会提示让你插入netinst的光盘 xff1a Media change please insert the disc labeled 当没有时就无法进行安装了 xff0c 这时可以打开文件
  • Source Insight使用教程

    作为一个开放源代码的操作系统 xff0c Linux 附带的源代码库使得广大爱好者有了一个广泛学习 深入钻研的机会 xff0c 特别是Linux 内核的组织极为复杂 xff0c 同时 xff0c 又不能像windows 平台的程序一样 xf
  • 注册表ShellIconOverlayIdentifiers中没有svn相关的选项

    此问题最初是由于svn不显示Icon入手排查的 打开注册表 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer ShellIconOverlayIden
  • CreateProcess注入方法

    采用 CreateProcess 的方法 xff0c 实现起来比较复杂 xff0c 但没有上面几种方法的局限性 且可以用其他工 具 xff08 VC 等 xff09 调试注入的 DLL 下面进行介绍 原理如下 xff1a 1 xff0e 用
  • U盘防毒最强方案(创建删不掉的autorun.inf文件夹)

    病毒 xff0c 每个人都深受其害 xff0c 痛恨不已 xff0c 特别是现在移动设备MP3 MP4 手机 U盘 移动硬盘飞速发展的时代 xff0c 病毒也随着这些移动设备和网络快速蔓延和滋生 xff0c 所以如何防止病毒入侵到自己的爱机
  • Windows 7桌面显示图标窗口类名称

    Windows 7下 xff0c 我们取桌面图标窗口的句柄使用以下语句 在windows XP时代 xff0c 我们获取桌面图标窗口的句柄往往用一下语句 xff1a lt pre gt lt pre name 61 34 code 34 c
  • EnumThreadWindows枚举线程的所有窗口

    BOOL CALLBACK EnumThreadWndProc HWND hwnd LPARAM lParam std list lt HWND gt plist 61 std list lt HWND gt lParam plist gt
  • MFC窗口创建、销毁消息流程

    Windows 消息处理机制 MFC 应用程序中处理消息的顺序 1 AfxWndProc 该函数负责接收消息 xff0c 找到消息所属的 CWnd 对象 xff0c 然后调用 AfxCallWndProc 2 AfxCallWndProc
  • 数字螺旋方阵C++实现

    include lt iostream h gt include lt stdio h gt void main int k h i j n int sum 61 0 int q 61 1 while 1 k 61 h 61 i 61 j
  • 过桥问题动画显示(多线程,简陋版)

    Code include lt windows h gt include lt iostream h gt include lt stdio h gt void gotoxy int x int y COORD c c X 61 x c Y