Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

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

Go down

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

Bài gửi  truongsi93(I11C) 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 : 38
Đến từ : Quảng Nam

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

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