Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #define MAX_ORDERS 100
- typedef enum {
- BURGER,
- FRIES,
- DRINK,
- SALAD
- } OrderType;
- typedef struct {
- int number;
- OrderType type;
- int preparationTime; // in seconds
- int status; // 0 for preparing, 1 for serving
- } Order;
- int main() {
- HANDLE hMapFile;
- Order *orders;
- hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MAX_ORDERS * sizeof(Order), "SharedMemory");
- if (hMapFile == NULL) {
- perror("CreateFileMapping");
- exit(EXIT_FAILURE);
- }
- orders = (Order *)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MAX_ORDERS * sizeof(Order));
- if (orders == NULL) {
- perror("MapViewOfFile");
- CloseHandle(hMapFile);
- exit(EXIT_FAILURE);
- }
- int orderNumber = 1;
- while (1) {
- Order newOrder;
- newOrder.number = orderNumber++;
- printf("Select order type (1-Burger, 2-Fries, 3-Drink, 4-Salad): ");
- int typeChoice;
- scanf("%d", &typeChoice);
- switch (typeChoice) {
- case 1:
- newOrder.type = BURGER;
- newOrder.preparationTime = 5; // 5 seconds for burger
- break;
- case 2:
- newOrder.type = FRIES;
- newOrder.preparationTime = 3; // 3 seconds for fries
- break;
- case 3:
- newOrder.type = DRINK;
- newOrder.preparationTime = 2; // 2 seconds for drink
- break;
- case 4:
- newOrder.type = SALAD;
- newOrder.preparationTime = 8; // 8 seconds for salad
- break;
- default:
- printf("Invalid order type.\n");
- continue; // Skip enqueue if invalid type
- }
- newOrder.status = 0; // Order is in preparing phase
- // Find an empty slot in shared memory to place the new order
- int i;
- for (i = 0; i < MAX_ORDERS; i++) {
- if (orders[i].status == -1) {
- orders[i] = newOrder;
- break;
- }
- }
- Sleep(1000); // Simulate delay before placing another order (1 second = 1000 ms)
- }
- UnmapViewOfFile(orders);
- CloseHandle(hMapFile);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement