hust操作系统原理实验:4.5(实验目的:熟悉Window线程创建过程)在windows环境下,利用高级语言编程环境(限定为VS环境或VC环境)调用CreateThread函数实现“并发地画圆和画方”。圆的中心,半径,颜色,正方形的中心,边长,颜色等参数自己确定,合适就行。圆和正方形的边界上建议取720个点。为直观展示绘制的过程,每个点绘制后睡眠0.2秒~0.5秒。
c++本身没有绘图的库,所以我用的easyx,可以去官网下载这个库,并把相应文件添加到所用ide的include和lib里。
#include<graphics.h>
#include<stdio.h>
#include<Windows.h>
#include<math.h>
#define pi 3.1415926535897932
//定义画方的线程 顺时针画
DWORD WINAPI drawSquare(LPVOID)
{
//分为720个点 180*4
for (int i = 0; i < 180; i++)
{
putpixel(50 + i, 50, RED);
Sleep(50);
}
for (int i = 0; i < 180; i++)
{
putpixel(50 + 180, 50 + i, RED);
Sleep(50);
}
for (int i = 0; i < 180; i++)
{
putpixel(50 + 180 - i, 50 + 180, RED);
Sleep(50);
}
for (int i = 0; i < 180; i++)
{
putpixel(50, 50 + 180 - i, RED);
Sleep(50);
}
return 0;
}
//定义画圆的函数
DWORD WINAPI drawCircle(LPVOID)
{
//同样分为720个点
for (int i = 0; i < 720; i++)
{
putpixel(350 + 100 * cos(-pi / 2 + (double)((i * pi) / 360)), 140 + 100 * sin(-pi / 2 + (double)((i * pi) / 360)), GREEN);
Sleep(50);
}
return 0;
}
int main()
{
// 初始化图形模式
initgraph(640, 480);
HANDLE hThread[2];//记录新线程句柄
DWORD threadID;//记录线程ID
if ((hThread[0] = CreateThread(NULL, 0, drawSquare, 0, 0, &threadID)) == NULL)
{
printf("线程创建失败!");
}
if ((hThread[1] = CreateThread(NULL, 0, drawCircle, 0, 0, &threadID)) == NULL)
{
printf("线程创建失败!");
}
//等待所有线程结束
WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
getchar();
// 关闭图形模式
closegraph();
return 0;
}
在vs2019环境下编译成功,而在dev-c++下编译不通过。