首先初始化一个临界资源对象。
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);
其余八个彩蛋类似。
浙公网安备 33010602011771号