操原上机(二) 并发地画圆和画方

实验内容

在 windows 环境下,利用高级语言编程环境(限定为 VS 环境或 VC 环境) 调用CreateThread 函数实现“并发地画圆和画方”。圆的中心,半径,颜色,正方形的中心,边长,颜色等参数自己确定,合适就行。圆和正方形的边界上建议 取 720 个点。为直观展示绘制的过程,每个点绘制后睡眠 0.2 秒~0.5 秒。

实现

就这道题的思想而言,要实现实验内容其实并不难。对于我们来说,只需要编写一个画圆的函数和一个画方的函数,然后再用CreateThread函数创建两个线程,分别画圆和画方,就可以实现并发的画圆和画方了。

关于画圆和画方的函数

这里,我们有两个思路。第一,直接在控制台对应的坐标打印*来画圆和画方,但这样画出来太丑。因此,我们采取第二种方法,导入graphcis.h头文件,创建画板,再调用里面的putpixel函数,给对应坐标的像素点赋色。这样画出来的圆和方就是一个标准的圆和方了。
需要说的一点是,graphcis.h是TC才有的头文件,因此如果你是用的VS之类的编译器,还需要自己手动导入这一头文件。导入的方法可以参考我写的另一篇博客:
https://blog.csdn.net/qq_42606750/article/details/89296952

代码

#include "pch.h"
#include <iostream>
#include<stdlib.h>
#include <graphics.h>
#include<math.h>
#include <windows.h>  

DWORD WINAPI drawCircle(LPVOID lpParam) {
	
	double pi = 3.1415926;

	for (int i = 0; i < 800; i++) {
		int x = 200 + 100*cos(i*pi/400);
		int y = 200 + 100*sin(i*pi/400);
		putpixel(x, y, RED);
		Sleep(10);
	}
	return 0;
}

DWORD WINAPI drawRectangle(LPVOID lpParam) {
	int x, y;
	for (int i = 0; i < 800; i++) {
		if (i < 200) {
			x = 500 + i;
			y = 100;
		}
		else if (i < 400) {
			x = 700;
			y = 100 + (i-200);
		}
		else if (i < 600) {
			x = 700 - (i - 400);
			y = 300;
		}
		else {
			x = 500;
			y = 300 - (i - 600);
		}
		putpixel(x, y, RED);
		Sleep(10);
	}
	return 0;
}

int main(){
	initgraph(800, 400);
	setbkcolor(YELLOW);
	HANDLE hThread[2];
	hThread[0] = CreateThread(NULL, 0, drawCircle, NULL, 0, NULL);
	hThread[1] = CreateThread(NULL, 0, drawRectangle, NULL, 0, NULL);
	WaitForMultipleObjects(2, hThread, TRUE, INFINITE); 	//等待子线程运行 
	system("pause");
	closegraph();          // 关闭绘图窗口
	return 0;
}
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值