今天以一个c++做的小程序教大家一些多线程相关的知识。
首先这个小程序的功能是模拟洗衣房,洗衣房里面一个有6部机器,每一部机器都是可以独立倒计时的。在主线程中可以选择对没有洗衣服的机器进行洗衣操作,有洗衣服中的,也就是倒计时中的机器就不能操作。
//用作多线程参数传递
struct TstuParam
{
int n;
};
首先,我们用先定义一个线程传参数的结构体。
TstuParam MyParam;
MyParam.n=10;
HANDLE hThread = CreateThread(NULL, 0, d, &MyParam, 0, NULL);
上面是把结构体的参数赋值为10,也就是让机器倒数10秒。
这里面的d是线程函数
DWORD WINAPI d(LPVOID lpParamter)
{
//得到参数
TstuParam* Param = (TstuParam*)lpParamter;
int n = Param->n;
int t,i=0;
t=time(NULL);
do{
if(t!=time(NULL)){
i++;
if(i>n){
break;
}
clearline(1);
printf("还有%d秒\n",n-i);
}
t=time(NULL);
//system("cls");
}
while(1);
return 0L;
}
线程函数需要独立书写,格式如上面所示。其实就是做了一个倒数的动作而已。
int lefttime[6]={-1,-1,-1,-1,-1,-1};
我们用lefttime来进行存储需要倒数的时间,如果机器还没有开始,那就不要开始倒数。
void PrintTime()
{
cout<<"-----------------欢迎来到洗衣店预约系统--------------"<<endl;
for(int i=0;i<6;i++)
{
cout<<"洗衣机"<<i+1<<":";
if (lefttime[i]==-1)
{
cout<<"未启动 ";
}
else if (lefttime[i]==0)
{
cout<<"洗衣完成 ";
}
else
{
cout<<lefttime[i]<<"";
}
cout<<endl;
}
cout<<"请选择你需要操作的洗衣机"<<endl;
}
最后打印每一部洗衣机是否已经启动,并且各自进行着自己的倒数。
最后效果如上图所示,洗衣机1是已经洗衣服完成的,洗衣机2,3是在清洗中,剩下的洗衣机都是还没有启动的。