下面著重介紹C++多線程,C++多線程為了同步完成了多項任務,而且很大程度的提高了資源使用效率,用較簡單的話語解釋C++多線程問題,它就是在同一時間內完成多項任務。
重要區段TCriticalSection)和事件TEvent)得到了應用。生產者通過TEvent類的對象Begin Consume來通知消費者開始消費,而消費者通過TEent類的對象Begin Produce通知生產者開始生產。程序中共有兩個生產者,一個消費者。在兩個生產者之間,通過TCriticalSection類的對象同步。其運行界面如圖1所示。
主要源程序如下所示:生產者線程:
- 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);
- }
- }
本文討論了C++多線程編程及其可行性,說明了在Windows環境下進行C++多線程編程的意義,並重點討論了C++Builder平台下如何開發多線程應用程序這一問題,通過實現"生產者-消費者問題"這一著名的進程同步問題,比較清晰地反映了在Windows環境下進行多線程編程技術及其實現的作用和效果。