首先初始化一个临界资源对象。

InitializeCriticalSection(&cs);

EnterCriticalSection(&cs);//加锁 接下来的代码处理过程中不允许其他线程进行操作,除非遇到LeaveCriticalSection

LeaveCriticalSection(&cs);//解锁 到EnterCriticalSection之间代码资源已经释放了,其他线程可以进行操作   

windows环境下创建线程等操作:

首先#include <Windows.h>

 HANDLE hThread1;//第一个彩蛋的线程

  hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//创建第一个彩蛋的线程

其中Fun1Proc定义如下:

DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data

{
while(1)
{
 EnterCriticalSection(&cs);

color[0]=qrand()%12;//使用color数组来判断此时颜色
LeaveCriticalSection(&cs);
}

return 0;
}

paintEvent(QPaintEvent * /* event */)画图函数里面代码如下所示:

EnterCriticalSection(&cs);
QPainter q(this);

switch(color[0]){
case 0:{
q.setBrush(Qt::red);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0,300, 300);
}
break;
case 1:{

q.setBrush(Qt::gray);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 2:{

q.setBrush(Qt::green);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 3:{

q.setBrush(Qt::black);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 4:{

q.setBrush(Qt::white);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 5:{

q.setBrush(Qt::yellow);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0,300, 300);
}
break;
case 6:{

q.setBrush(Qt::red);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0,300, 300);
}
break;
case 7:{

q.setBrush(Qt::blue);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 8:{

q.setBrush(Qt::red);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0,300, 300);
}
break;
case 9:{

q.setBrush(Qt::black);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 10:{

q.setBrush(Qt::blue);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 11:{

q.setBrush(Qt::blue);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0, 300, 300);
}
break;
case 12:{

q.setBrush(Qt::green);
q.setPen(QPen(Qt::yellow, 4, Qt::SolidLine));
q.drawEllipse(0, 0,300, 300);
}
break;
default:break;
}

 LeaveCriticalSection(&cs);

其余八个彩蛋类似。