Advertisement
bobingbong

producer.c

May 14th, 2024 (edited)
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.35 KB | Source Code | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. #define MAX_ORDERS 100
  6.  
  7. typedef enum {
  8.     BURGER,
  9.     FRIES,
  10.     DRINK,
  11.     SALAD
  12. } OrderType;
  13.  
  14. typedef struct {
  15.     int number;
  16.     OrderType type;
  17.     int preparationTime; // in seconds
  18.     int status; // 0 for preparing, 1 for serving
  19. } Order;
  20.  
  21. int main() {
  22.     HANDLE hMapFile;
  23.     Order *orders;
  24.  
  25.     hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MAX_ORDERS * sizeof(Order), "SharedMemory");
  26.  
  27.     if (hMapFile == NULL) {
  28.         perror("CreateFileMapping");
  29.         exit(EXIT_FAILURE);
  30.     }
  31.  
  32.     orders = (Order *)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MAX_ORDERS * sizeof(Order));
  33.  
  34.     if (orders == NULL) {
  35.         perror("MapViewOfFile");
  36.         CloseHandle(hMapFile);
  37.         exit(EXIT_FAILURE);
  38.     }
  39.  
  40.     int orderNumber = 1;
  41.     while (1) {
  42.         Order newOrder;
  43.         newOrder.number = orderNumber++;
  44.         printf("Select order type (1-Burger, 2-Fries, 3-Drink, 4-Salad): ");
  45.         int typeChoice;
  46.         scanf("%d", &typeChoice);
  47.         switch (typeChoice) {
  48.             case 1:
  49.                 newOrder.type = BURGER;
  50.                 newOrder.preparationTime = 5; // 5 seconds for burger
  51.                 break;
  52.             case 2:
  53.                 newOrder.type = FRIES;
  54.                 newOrder.preparationTime = 3; // 3 seconds for fries
  55.                 break;
  56.             case 3:
  57.                 newOrder.type = DRINK;
  58.                 newOrder.preparationTime = 2; // 2 seconds for drink
  59.                 break;
  60.             case 4:
  61.                 newOrder.type = SALAD;
  62.                 newOrder.preparationTime = 8; // 8 seconds for salad
  63.                 break;
  64.             default:
  65.                 printf("Invalid order type.\n");
  66.                 continue; // Skip enqueue if invalid type
  67.         }
  68.         newOrder.status = 0; // Order is in preparing phase
  69.  
  70.         // Find an empty slot in shared memory to place the new order
  71.         int i;
  72.         for (i = 0; i < MAX_ORDERS; i++) {
  73.             if (orders[i].status == -1) {
  74.                 orders[i] = newOrder;
  75.                 break;
  76.             }
  77.         }
  78.  
  79.         Sleep(1000); // Simulate delay before placing another order (1 second = 1000 ms)
  80.     }
  81.  
  82.     UnmapViewOfFile(orders);
  83.     CloseHandle(hMapFile);
  84.  
  85.     return 0;
  86. }
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement