Implemented connection timeout in C++

This commit is contained in:
Alessandro Ranellucci 2015-11-02 20:34:36 +01:00
parent 4295d65115
commit 9ee6829ebc
5 changed files with 19 additions and 18 deletions

View File

@ -301,12 +301,7 @@ sub connect {
if (!$res) {
$self->set_status("Connection failed");
}
{
# set up a timeout
my $timestamp = time();
1 until $self->sender->is_connected || (time - $timestamp) >= CONNECTION_TIMEOUT;
}
if ($self->sender->is_connected) {
if ($self->sender->wait_connected) {
$self->set_status("Printer is online. You can now start printing from the queue on the right.");
$self->status_timer->Start(STATUS_TIMER_INTERVAL, wxTIMER_CONTINUOUS);
$self->temp_timer->Start(TEMP_TIMER_INTERVAL, wxTIMER_CONTINUOUS);

View File

@ -1094,16 +1094,7 @@ sub build {
$self->{config}->serial_port,
$self->{config}->serial_speed,
);
if ($res) {
{
# set up a timeout
my $timestamp = time();
my $CONNECTION_TIMEOUT = 3; # seconds
1 until $sender->is_connected || (time - $timestamp) >= $CONNECTION_TIMEOUT;
}
$res = $sender->is_connected;
}
if ($res) {
if ($res && $sender->wait_connected) {
Slic3r::GUI::show_info($self, "Connection to printer works correctly.", "Success!");
} else {
Slic3r::GUI::show_error($self, "Connection failed.");

View File

@ -5,6 +5,7 @@
#include <string>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/lexical_cast.hpp>
#if __APPLE__
@ -134,6 +135,18 @@ GCodeSender::is_connected() const
return this->connected;
}
bool
GCodeSender::wait_connected(unsigned int timeout) const
{
using namespace boost::posix_time;
ptime t0 = second_clock::local_time() + seconds(timeout);
while (!this->connected) {
if (second_clock::local_time() > t0) return false;
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
}
return true;
}
size_t
GCodeSender::queue_size() const
{

View File

@ -24,6 +24,7 @@ class GCodeSender : private boost::noncopyable {
void disconnect();
bool error_status() const;
bool is_connected() const;
bool wait_connected(unsigned int timeout = 3) const;
size_t queue_size() const;
void pause_queue();
void resume_queue();

View File

@ -13,8 +13,9 @@
bool connect(std::string port, unsigned int baud_rate);
void disconnect();
bool is_connected() const;
int queue_size() const;
bool is_connected();
bool wait_connected(unsigned int timeout = 3);
int queue_size();
void send(std::string s, bool priority = false);
void pause_queue();
void resume_queue();