Welcome
admin
admin

2026-07-04 10:03:37

世界杯误判
9070 934

#include

#include

#include

#include

#define QUEUE_SIZE 10

typedef struct {

int packets[QUEUE_SIZE];

int front;

int rear;

int size;

pthread_mutex_t lock;

} PacketQueue;

void init_queue(PacketQueue* queue) {

queue->front = 0;

queue->rear = 0;

queue->size = 0;

pthread_mutex_init(&queue->lock, NULL);

}

int is_empty(PacketQueue* queue) {

return queue->size == 0;

}

int is_full(PacketQueue* queue) {

return queue->size == QUEUE_SIZE;

}

void enqueue(PacketQueue* queue, int packet) {

pthread_mutex_lock(&queue->lock);

if (is_full(queue)) {

printf("Queue is full!n");

pthread_mutex_unlock(&queue->lock);

return;

}

queue->packets[queue->rear] = packet;

queue->rear = (queue->rear + 1) % QUEUE_SIZE;

queue->size++;

pthread_mutex_unlock(&queue->lock);

}

int dequeue(PacketQueue* queue) {

pthread_mutex_lock(&queue->lock);

if (is_empty(queue)) {

printf("Queue is empty!n");

pthread_mutex_unlock(&queue->lock);

return -1;

}

int packet = queue->packets[queue->front];

queue->front = (queue->front + 1) % QUEUE_SIZE;

queue->size--;

pthread_mutex_unlock(&queue->lock);

return packet;

}

void send_packet(int packet) {

// 模拟发送数据包的函数

printf("Packet %d sent!n", packet);

}

int get_network_delay() {

// 使用ping命令检测网络延迟

FILE* fp;

char buffer[128];

int delay = 0;

fp = popen("ping -c 1 google.com | grep 'time=' | awk -F'=' '{print $4}' | awk '{print $1}'", "r");

if (fp == NULL) {

printf("Failed to run commandn" );

exit(1);

}

while (fgets(buffer, sizeof(buffer), fp) != NULL) {

delay = atoi(buffer);

}

pclose(fp);

return delay;

}

void* sender_thread(void* arg) {

PacketQueue* queue = (PacketQueue*)arg;

while (1) {

int packet = dequeue(queue);

if (packet != -1) {

send_packet(packet);

}

usleep(500000); // 暂停0.5秒

}

}

int main() {

PacketQueue queue;

init_queue(&queue);

pthread_t thread;

pthread_create(&thread, NULL, sender_thread, (void*)&queue);

for (int i = 0; i < 15; i++) {

int delay = get_network_delay();

printf("Network delay: %d msn", delay);

if (delay < 50) {

enqueue(&queue, i);

} else {

printf("Network delay is too high, pausing...n");

}

usleep(1000000); // 暂停1秒

}

pthread_join(thread, NULL);

return 0;

}