Tôi đang tạo một máy chủ khách mô phỏng thức ăn nhanh hoặc bất cứ thứ gì, sử dụng select() trong C.
Tôi có khách hàng gọi 1-5 món ngẫu nhiên. Máy chủ quyết định cứ sau 30 giây. Tất cả các món ăn yêu thích của khách hàng của bạn là gì? Anh ta phục vụ những khách hàng đó, họ ngắt kết nối và những việc còn lại, gửi tin nhắn cho họ và chờ đợi. Khách hàng không được phục vụ thử thêm 2 lần nữa, nếu không họ sẽ rời đi.
Câu hỏi của tôi là làm cách nào để máy chủ kiểm tra 30 giây một lần. Đơn đặt hàng của họ là gì?
Mình đã thử tạo một mảng nhưng không biết làm cách nào để server "kiểm tra" liên tục 30 giây một lần. Sau đó đặt mảng thành 0.
Mã giả như sau:
**khách hàng**
kiên nhẫn=0;được phục vụ=0;
do
{gửi ngẫu nhiên 1-5
nhận tin nhắn nếu 1->được phục vụ=1; nếu 0, kiên nhẫn++;
}trong khi kiên nhẫn !=3 và phục vụ!=1;
nếu được phục vụ==1 gửi -1
nếu không hãy gửi -2
đóng kết nối
**Máy chủ**
while(1)
{
phục vụ khách hàng một cách đồng thời
select
thêm ứng dụng khách vào danh sách ổ cắm
phục vụ khách hàng
tin nhắn chờ
nếu 1-5 thêm vào vector
// ở đây tôi không biết làm cách nào để đợi trong 30 giây.
// Nếu tôi đặt chế độ ngủ (30), nó sẽ chuyển sang chế độ ngủ cho mỗi khách hàng mỗi lần. Tôi muốn nó kiểm tra vĩnh viễn sau mỗi 30 giây và gửi tin nhắn cho khách hàng.
gửi phản hồi (0 hoặc 1, tùy thuộc vào thứ tự tối đa có giống với thứ tự của khách hàng hay không)
nếu -1, cảm ơn vì thức ăn
nếu -2, đi nơi khác
đóng kết nối máy khách
}
Bạn có thể muốn thử hàm sleep() trong một vòng lặp, tác dụng của nó là tạm dừng chương trình của bạn trong khoảng thời gian dài đó rồi thực hiện các câu lệnh sau.
ngủ(30);
Tôi nghĩ đây là điều bạn muốn. hãy nhìn xemđâyTìm hiểu thêm về giấc ngủ.
Mã của bạn sẽ trông như thế này:
for(i=0; i<=100; i++)//Kiểm tra 100 lần
{
ngủ(30);
checkserverforupdate();
}
gia hạnMã số:
while(1){//chạy vô số lần
sleep(30);//tạm dừng ở đây 30 giây mỗi lần trước/sau khi chạy đoạn mã sau
*khách hàng**
kiên nhẫn=0;được phục vụ=0;
do
{gửi ngẫu nhiên 1-5
nhận tin nhắn nếu 1->được phục vụ=1; nếu 0, kiên nhẫn++;
}trong khi kiên nhẫn !=3 và phục vụ!=1;
nếu được phục vụ==1 gửi -1
nếu không hãy gửi -2
đóng kết nối
**Máy chủ**
while(1)
{
phục vụ khách hàng một cách đồng thời
select
thêm ứng dụng khách vào danh sách ổ cắm
phục vụ khách hàng
tin nhắn chờ
nếu 1-5 thêm vào vector
// ở đây tôi không biết làm cách nào để đợi trong 30 giây.
// Nếu tôi đặt chế độ ngủ (30), nó sẽ chuyển sang chế độ ngủ cho mỗi khách hàng mỗi lần. Tôi muốn nó kiểm tra vĩnh viễn sau mỗi 30 giây và gửi tin nhắn cho khách hàng.
gửi phản hồi (0 hoặc 1, tùy thuộc vào thứ tự tối đa có giống với thứ tự của khách hàng hay không)
nếu -1, cảm ơn vì thức ăn
nếu -2, đi nơi khác
đóng kết nối máy khách
}
}
Hãy xem điều gì xảy ra với chế độ ngủ (30), chương trình tạm dừng trong 30 giây và sau đó thực thi mã được viết sau đó, nếu bạn đặt nó vào vòng lặp while, nó sẽ luôn đợi.
更新 2:
Mã để lấy thời gian hiện tại trong C:
đây
/* ví dụ về giờ địa phương */
#include
#include
int chính()
{
time_t thời gian thô;
struct tm * timeinfo;
thời gian ( &rawtime );
timeinfo = giờ địa phương ( &rawtime );
printf( "Ngày giờ địa phương hiện tại: %s", asctime (timeinfo) );
return 0;
}
Cập nhật 3: Vì vậy, mã của bạn sẽ trông như thế này:
time_t thời gian thô;
struct tm * timeinfo;
thời gian ( &rawtime );
timeinfo = giờ địa phương ( &rawtime );
printf( "Ngày giờ địa phương hiện tại: %s", asctime (timeinfo) );
Tất cả mã của bạn ở đây
và sau đó lấy lại thời gian,
time_t rawtime1;
.....
và sau đó bạn có thể tính toán sự khác biệt giữa chúng và đặt câu lệnh ngủ theo ý muốn. Nếu thời gian bạn muốn nó tạm dừng là x thì,
ngủ(x);
return 0;
Tôi là một lập trình viên xuất sắc, rất giỏi!