Void __fast call TProducerThread:: Execute ()
{
//---- Place thread code here ----
Int i = 0;
Int j;
while(i<100) //每個生產者線程生產100個商品
{
Sleep(1000);//延遲,為清楚得顯示執行效果
if(Form1->buffer_size > 0)//緩沖池不空,通知消費者消費
{
Form1->Begin Consumer->Set Event ();
}
Form1->Produce Guard->Acquire ();
i++;
StrResult = IntToStr (i);
J = Form1->buffer_size;
Form1->Product [j] = i;
Form1->buffer_size++;
Synchronize(Show Result);//刷新界面,顯示最新生產-消費狀況
Form1->Begin Consumer->Set Event();//通知消費者消費
if(Form1->buffer_size == 5)//緩沖池滿,掛起生產者線程,直到通知再生產
{
Form1->Begin Produce->Wait For (INFINITE);
}
Sleep (1000);
Form1->Produce Guard->Release ();
}
While (Form1->buffer_size > 0)
{
Form1->Begin Consumer->Set Event ();
}
}
Void __fast call TConsumerThread::Execute()
{
//---- Place thread code here ----
Int j;
For (int i = 0;i < 200;i++)
{
Sleep(100); //延遲,為清楚得顯示執行效果
Form1->Begin Consumer->Wait For(INFINITE);//掛起消費者線程,直到通知再消費
J = Form1->buffer_size - 1;
StrResult = IntToStr (Form1->Product [j]);
Form1->buffer_size--;
Synchronize(Show Result); //刷新界面,顯示最新生產-消費狀況
if(Form1->buffer_size == 4)//緩沖池不再full,喚醒由于緩沖池full而掛起的生產者線程
{
Form1->Begin Produce->Set Event ();
}
Sleep (100);
}
}
新聞熱點
疑難解答