2012-01-31 35 views
5

Ở đây tôi có một chức năng là chế độ nghe. chức năng này liệt kê một cái gì đó mà tôi đã hình thành một số thiết bị.Muốn triển khai Timeout cho một chức năng trong C

Ở đây khi chức năng của tôi đang ở chế độ nghe, thời gian tôi muốn tạo thời gian chờ. nếu tôi sẽ không nhận được bất kỳ phản ứng từ thiết bị cụ thể hơn tôi muốn o thoát khỏi chức năng này và phải thông báo.

nếu trong khoảng thời gian chờ này nếu tôi nhận được phản hồi từ thiết bị, tôi phải tiếp tục công việc và ngừng thời gian chờ này và không có giới hạn để hoàn thành công việc này trong bất kỳ khoảng thời gian nào.

Vậy làm cách nào tôi có thể thực hiện điều này cho một chức năng.

Bất kỳ cơ thể nào có thể giúp tôi thực hiện điều này với chức năng hết thời gian chờ.

+0

Tôi nghĩ rằng cách duy nhất để làm điều này là bắt đầu một quy trình riêng biệt, mà sau đó bạn sẽ giết nếu mất quá nhiều thời gian. Rất khó để "dừng" mã đang chạy bên trong quá trình của bạn. – Lalaland

Trả lời

1

Hãy xem man 2 alarm. Bạn có thể đặt hoặc tắt các tín hiệu sẽ được gửi đến ứng dụng của bạn sau một khoảng thời gian nhất định.

+0

Có ví dụ nào không? – user1089679

3

Tùy thuộc vào cách bạn đang chờ phản hồi từ thiết bị này, câu trả lời cho câu hỏi của bạn sẽ khác. Khung cơ bản là:

int do_something_with_device() 
{ 
    if (!wait_for_response_from_device()) { 
     return TIMEOUT_ERROR; 
    } 
    // continue with processing 
} 

Về cách bạn triển khai wait_for_response_from_device(), mọi thiết bị đều khác nhau. Nếu bạn đang sử dụng ổ cắm hoặc đường ống, hãy sử dụng select(). Nếu bạn đang giao tiếp với một cái gì đó mà đòi hỏi một vòng lặp bận rộn-chờ đợi, nó có thể trông giống như:

int wait_for_response_from_device() 
{ 
    time_t start = time(NULL); 
    while (time(NULL) - start < TIMEOUT) { 
     if (check_device_ready()) { 
      return 1; 
     } 
    } 
    return 0; 
} 

Đương nhiên, việc thực hiện check_device_ready() sẽ tùy thuộc vào bạn.

+0

Ở đây tôi có một chức năng đặt thiết bị của tôi ở chế độ nghe, vì thiết bị của tôi đã sẵn sàng nhận tệp từ bất kỳ thiết bị nào thông qua bluetooth. ở đây tôi đang sử dụng thư viện obex_test cho – user1089679

+0

Sau một thời gian nếu tôi không nhận được mẫu trả lời từ xa có nghĩa là thiết bị (bất kỳ thiết bị di động) hơn tôi phải ngắt kết nối này và thông báo cho máy chủ của tôi – user1089679

Các vấn đề liên quan