code sản xuất và tiêu thụ

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

code sản xuất và tiêu thụ

Bài gửi  truongsi93(I11C) on 28/10/2011, 15:28

Hàm sản xuất:
void Producer(){
while (1){
// ... San xuat (nextProduced) --> quá trình tạo ra 1 sản phẩm

while(((in+1)%BUFFER_SIZE)==out); ---> vòng lặp quẩn tại đây cho đến khi có 1 chỗ trống trong bộ đệm hay ngăn chứa sản phẩm

//khi vòng lặp while kết thúc --> có 1 chỗ trống để chèn sản phẩm vô
buffer[in]=nextProduced++; //chèn sản phẩm vô ngăn chứa
in=(in+1)%BUFFER_SIZE; //tìm vị trí khác để Producer chèn thêm sản phầm vào

SuspendThread(GetCurrentThread()); //GetCurrentThread() -->lấy luồng hiện hành, SuspendThread --> hàm API dùng để tạo ngưng 1 luồng
}
}

Hàm tiêu thụ:

void Consumer(){
int nextConsumed;
while (1){
while(in==out); // vòng lặp quẩn tại đây khi các ngăn chứa sản phầm đều trống

//vòng lặp while thoát khi có 1 ngăn chứa sản phầm
nextConsumed=buffer[out]; //lấy sản phẩm ra khỏi ngăn
out=(out+1)%BUFFER_SIZE; //tìm vị trí khác để Consumer lấy sản phẩm

// ... Tieu thu (nextConsumed) --> quá trình tiêu thụ sàn phẩm

Sleep(GetTickCount()%5000); // hàm API đưa luồng vào trạng thái ngủ trong khi chờ Producer sản xuất thêm sản phầm, ngủ trong khoảng GetTickCount() % 5000
}
}

Hàm Main

int main(){
HANDLE ProducerHandle1; //biến Handle chứa mục quản NSX
HANDLE ConsumerHandle1; // biến Handle chứa mục quản NTT

DWORD ProducerID1, ProducerID2; //chứa ID NSX và NTT

ProducerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Producer,0,4,&ProducerID1); //khởi tạo NSX với các thông tin: Producer, ID, số 4 biểu thị trạng thái của Producer lúc khởi tạo: trạng thái ngủ


ConsumerHandle1=CreateThread(0,0,(LPTHREAD_START_ROUTINE)Consumer,0,0,&ConsumerID1); //khởi tạo NTT với các thông tin: Consumer, ID, số 0 biểu thị trạng thái của Producer lúc khởi tạo: trạng thái thức
while(1)
{
printf("\n- Nhan phim P/p de san xuat, nhan 0 de ket thuc:");
switch (getch()){
case 'P': //nhấn phím P=Producing
ResumeThread(ProducerHandle1);// đánh thức Producer lúc này đang ở trạng thái ngủ
break;
case 'p':
ResumeThread(ProducerHandle2); // tương tự như trên
break;
case '0': //giải phóng Producer và Consumer khỏi bộ nhớ
CloseHandle(ProducerHandle1);
CloseHandle(ConsumerHandle1);
return 0;

}
Sleep(1); //ngừng 1 khoảng thời gian nhất định
ShowBuffer(); //show kết quả sau khi sản xuất tiêu thụ
}
}


truongsi93(I11C)

Tổng số bài gửi : 33
Join date : 30/08/2011
Age : 30
Đến từ : Quảng Nam

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết