Commit a304e76d authored by Pavel Vainerman's avatar Pavel Vainerman

(codegen): Сделал activate-timeout по умолчанию 30 сек (было 10),

а также 90 сек для SM, добавил вывод информации о текущем состоянии инициализации процесса (PassiveTimer): исправление ошибки 'sock_set_timeout: xxxxxxx tries to set negative timeout (LogServer): попытка решить проблемму бесконечного ожидания на mutex-е
parent 85b0ca16
...@@ -416,6 +416,8 @@ ...@@ -416,6 +416,8 @@
std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */ std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */
size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */ size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */
std::string ostate = { "" }; /*!< состояние процесса (выводится в getInfo()) */
</xsl:if> </xsl:if>
</xsl:template> </xsl:template>
...@@ -476,22 +478,42 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage* ...@@ -476,22 +478,42 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage*
} }
case SystemMessage::StartUp: case SystemMessage::StartUp:
{ {
if( !logserv_host.empty() &amp;&amp; logserv_port != 0 &amp;&amp; !logserv-&gt;isRunning() ) ostate = "StartUp...";
try
{
if( !logserv_host.empty() &amp;&amp; logserv_port != 0 &amp;&amp; !logserv-&gt;isRunning() )
{
ostate = "StartUp: run log server...";
myinfo &lt;&lt; myname &lt;&lt; "(preSysCommand): run log server " &lt;&lt; logserv_host &lt;&lt; ":" &lt;&lt; logserv_port &lt;&lt; endl;
logserv-&gt;run(logserv_host, logserv_port, true);
}
}
catch( std::exception&amp; ex )
{ {
myinfo &lt;&lt; myname &lt;&lt; "(preSysCommand): run log server " &lt;&lt; logserv_host &lt;&lt; ":" &lt;&lt; logserv_port &lt;&lt; endl; mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t run log server err: " &lt;&lt; ex.what() &lt;&lt; endl;
logserv-&gt;run(logserv_host, logserv_port, true); }
catch( ... )
{
mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t run log server err: catch ..." &lt;&lt; endl;
} }
ostate = "StartUp: wait sm ready..";
waitSM(smReadyTimeout); waitSM(smReadyTimeout);
ptStartUpTimeout.reset(); ptStartUpTimeout.reset();
// т.к. для io-переменных важно соблюдать последовательность! // т.к. для io-переменных важно соблюдать последовательность!
// сперва обновить входы.. // сперва обновить входы..
ostate = "StartUp: update values..";
updateValues(); updateValues();
ostate = "StartUp: init from SM..";
initFromSM(); // потом обновить значения переменных, помеченных как инициализируемые из SM initFromSM(); // потом обновить значения переменных, помеченных как инициализируемые из SM
ostate = "StartUp: update outputs..";
updateOutputs(true); // а потом уже выходы (принудительное обновление) updateOutputs(true); // а потом уже выходы (принудительное обновление)
ostate = "StartUp: pre ask sensors..";
preAskSensors(UniversalIO::UIONotify); preAskSensors(UniversalIO::UIONotify);
ostate = "StartUp: ask sensors..";
askSensors(UniversalIO::UIONotify); askSensors(UniversalIO::UIONotify);
active = true; active = true;
ostate = "StartUp: [OK]";
break; break;
} }
...@@ -514,8 +536,19 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage* ...@@ -514,8 +536,19 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::preSysCommand( const SystemMessage*
if( logserv &amp;&amp; !logserv_host.empty() &amp;&amp; logserv_port != 0 ) if( logserv &amp;&amp; !logserv_host.empty() &amp;&amp; logserv_port != 0 )
{ {
mylogany &lt;&lt; myname &lt;&lt; "(preSysCommand): try restart logserver.." &lt;&lt; endl; try
logserv-&gt;check(true); {
mylogany &lt;&lt; myname &lt;&lt; "(preSysCommand): try restart logserver.." &lt;&lt; endl;
logserv-&gt;check(true);
}
catch( std::exception&amp; ex )
{
mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t restart log server err: " &lt;&lt; ex.what() &lt;&lt; endl;
}
catch( ... )
{
mywarn &lt;&lt; myname &lt;&lt; "(preSysCommand): CAN`t restart log server err: catch ..." &lt;&lt; endl;
}
} }
} }
break; break;
...@@ -536,6 +569,8 @@ uniset::SimpleInfo* <xsl:value-of select="$CLASSNAME"/>_SK::getInfo( CORBA::Long ...@@ -536,6 +569,8 @@ uniset::SimpleInfo* <xsl:value-of select="$CLASSNAME"/>_SK::getInfo( CORBA::Long
ostringstream inf; ostringstream inf;
inf &lt;&lt; i->info &lt;&lt; endl; inf &lt;&lt; i->info &lt;&lt; endl;
inf &lt;&lt; "initialization: " &lt;&lt; ostate &lt;&lt; endl;
if( logserv /* &amp;&amp; userparam &lt; 0 */ ) if( logserv /* &amp;&amp; userparam &lt; 0 */ )
{ {
inf &lt;&lt; "LogServer: " &lt;&lt; logserv_host &lt;&lt; ":" &lt;&lt; logserv_port inf &lt;&lt; "LogServer: " &lt;&lt; logserv_host &lt;&lt; ":" &lt;&lt; logserv_port
...@@ -800,10 +835,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te ...@@ -800,10 +835,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te
&lt;&lt; wait_msec &lt;&lt; " мсек"; &lt;&lt; wait_msec &lt;&lt; " мсек";
mycrit &lt;&lt; err.str() &lt;&lt; endl; mycrit &lt;&lt; err.str() &lt;&lt; endl;
// terminate(); std::abort();
// abort();
// raise(SIGTERM);
std::terminate();
// throw uniset::SystemError(err.str()); // throw uniset::SystemError(err.str());
} }
...@@ -815,10 +847,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te ...@@ -815,10 +847,7 @@ void <xsl:value-of select="$CLASSNAME"/>_SK::waitSM( int wait_msec, ObjectId _te
&lt;&lt; wait_msec &lt;&lt; " мсек"; &lt;&lt; wait_msec &lt;&lt; " мсек";
mycrit &lt;&lt; err.str() &lt;&lt; endl; mycrit &lt;&lt; err.str() &lt;&lt; endl;
// terminate(); std::abort();
// abort();
//raise(SIGTERM);
std::terminate();
// throw uniset::SystemError(err.str()); // throw uniset::SystemError(err.str());
} }
} }
...@@ -1229,9 +1258,9 @@ end_private(false) ...@@ -1229,9 +1258,9 @@ end_private(false)
if( smTestID == DefaultObjectId ) if( smTestID == DefaultObjectId )
smTestID = getSMTestID(); smTestID = getSMTestID();
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000); activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 40000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000); int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 30000);
ptStartUpTimeout.setTiming(msec); ptStartUpTimeout.setTiming(msec);
// ===================== &lt;variables&gt; ===================== // ===================== &lt;variables&gt; =====================
...@@ -1695,10 +1724,11 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000)) ...@@ -1695,10 +1724,11 @@ askPause(uniset_conf()->getPIntProp(cnode,"askPause",2000))
vmonit(smTestID); vmonit(smTestID);
vmonit(smReadyTimeout); vmonit(smReadyTimeout);
vmonit(activateTimeout);
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000); activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 40000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000); int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 30000);
ptStartUpTimeout.setTiming(msec); ptStartUpTimeout.setTiming(msec);
} }
......
...@@ -511,6 +511,24 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -511,6 +511,24 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
* Mon Nov 21 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt2 * Mon Nov 21 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt2
- UNet: fixed bug in change receive channel - UNet: fixed bug in change receive channel
* Sat Nov 19 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.5
- LogServer: attempt to fixed bug in run fuction (infinity lock)
* Sat Nov 19 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.4
- LogServer: attempt to fixed bug in run fuction (infinity lock)
* Sat Nov 19 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.3
- (codegen): add process state info for getInfo()
* Fri Nov 18 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.2
- set default activate-timeout 30 sec
- show pid() in getInfo()
- minor fixes
* Fri Nov 18 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1.1
- add try/catch for run log server
>>>>>>> (codegen): Сделал activate-timeout по умолчанию 30 сек (было 10),
* Fri Nov 11 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1 * Fri Nov 11 2016 Pavel Vainerman <pv@altlinux.ru> 2.6-alt1
- build new version - build new version
- remove 'fastSaveValue' - remove 'fastSaveValue'
......
...@@ -44,10 +44,11 @@ void SharedMemory::help_print( int argc, const char* const* argv ) ...@@ -44,10 +44,11 @@ void SharedMemory::help_print( int argc, const char* const* argv )
cout << "--heartbeat-check-time - период проверки 'счётчиков'. По умолчанию 1000 мсек" << endl; cout << "--heartbeat-check-time - период проверки 'счётчиков'. По умолчанию 1000 мсек" << endl;
cout << "--e-filter - фильтр для считывания <eventlist>" << endl; cout << "--e-filter - фильтр для считывания <eventlist>" << endl;
cout << "--e-startup-pause - пауза перед посылкой уведомления о старте SM. (По умолчанию: 1500 мсек)." << endl; cout << "--e-startup-pause - пауза перед посылкой уведомления о старте SM. (По умолчанию: 1500 мсек)." << endl;
cout << "--activate-timeout - время ожидания активизации (По умолчанию: 15000 мсек)." << endl; cout << "--activate-timeout - время ожидания активизации (По умолчанию: 60000 мсек)." << endl;
cout << "--sm-no-history - отключить ведение истории (аварийного следа)" << endl; cout << "--sm-no-history - отключить ведение истории (аварийного следа)" << endl;
cout << "--pulsar-id - датчик 'мигания'" << endl; cout << "--pulsar-id - датчик 'мигания'" << endl;
cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl; cout << "--pulsar-msec - период 'мигания'. По умолчанию: 5000." << endl;
cout << "--db-logging [1,0] - включение или отключение логирования датчиков в БД (должен быть запущен DBServer)" << endl;
cout << endl; cout << endl;
cout << " Logs: " << endl; cout << " Logs: " << endl;
cout << "--sm-log-... - log control" << endl; cout << "--sm-log-... - log control" << endl;
...@@ -157,7 +158,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std: ...@@ -157,7 +158,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std:
evntPause = conf->getArgPInt("--e-startup-pause", 5000); evntPause = conf->getArgPInt("--e-startup-pause", 5000);
activateTimeout = conf->getArgPInt("--activate-timeout", 60000); activateTimeout = conf->getArgPInt("--activate-timeout", 90000);
sidPulsar = DefaultObjectId; sidPulsar = DefaultObjectId;
string p = conf->getArgParam("--pulsar-id", it.getProp("pulsar_id")); string p = conf->getArgParam("--pulsar-id", it.getProp("pulsar_id"));
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2016-11-11+03:00 // generate timestamp: 2016-11-19+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef UObject_SK_H_ #ifndef UObject_SK_H_
#define UObject_SK_H_ #define UObject_SK_H_
...@@ -119,7 +119,8 @@ class UObject_SK: ...@@ -119,7 +119,8 @@ class UObject_SK:
inline std::string dumpVars(){ return std::move(vmon.pretty_str()); } inline std::string dumpVars(){ return std::move(vmon.pretty_str()); }
// ------------------------------------------------------------ // ------------------------------------------------------------
std::string help() noexcept; std::string help() noexcept;
#ifndef DISABLE_REST_API #ifndef DISABLE_REST_API
// HTTP API // HTTP API
virtual nlohmann::json httpGet( const Poco::URI::QueryParameters& p ) override; virtual nlohmann::json httpGet( const Poco::URI::QueryParameters& p ) override;
...@@ -158,10 +159,11 @@ class UObject_SK: ...@@ -158,10 +159,11 @@ class UObject_SK:
virtual void sigterm( int signo ) override; virtual void sigterm( int signo ) override;
virtual bool activateObject() override; virtual bool activateObject() override;
virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */ virtual std::string getMonitInfo(){ return ""; } /*!< пользовательская информация выводимая в getInfo() */
#ifndef DISABLE_REST_API #ifndef DISABLE_REST_API
virtual void httpGetUserData( nlohmann::json& jdata ){} /*!< для пользовательских данных в httpGet() */ virtual void httpGetUserData( nlohmann::json& jdata ){} /*!< для пользовательских данных в httpGet() */
virtual nlohmann::json httpDumpIO(); virtual nlohmann::json httpDumpIO();
virtual nlohmann::json httpRequestLog( const Poco::URI::QueryParameters& p ); virtual nlohmann::json httpRequestLog( const Poco::URI::QueryParameters& p );
#endif #endif
// Выполнение очередного шага программы // Выполнение очередного шага программы
...@@ -250,6 +252,8 @@ class UObject_SK: ...@@ -250,6 +252,8 @@ class UObject_SK:
std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */ std::unordered_map<const uniset::ObjectId,size_t, StatHashFn> smStat; /*!< количество сообщений по датчикам */
size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */ size_t processingMessageCatchCount = { 0 }; /*!< количество исключений пойманных в processingMessage */
std::string ostate = { "" }; /*!< состояние процесса (выводится в getInfo()) */
bool end_private; // вспомогательное поле (для внутреннего использования при генерировании кода) bool end_private; // вспомогательное поле (для внутреннего использования при генерировании кода)
}; };
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ. ВСЕ ВАШИ ИЗМЕНЕНИЯ БУДУТ ПОТЕРЯНЫ.
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// generate timestamp: 2016-11-11+03:00 // generate timestamp: 2016-11-19+03:00
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <memory> #include <memory>
#include <iomanip> #include <iomanip>
...@@ -196,9 +196,9 @@ end_private(false) ...@@ -196,9 +196,9 @@ end_private(false)
if( smTestID == DefaultObjectId ) if( smTestID == DefaultObjectId )
smTestID = getSMTestID(); smTestID = getSMTestID();
activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 20000); activateTimeout = conf->getArgPInt("--" + argprefix + "activate-timeout", 40000);
int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 10000); int msec = conf->getArgPInt("--" + argprefix + "startup-timeout", 30000);
ptStartUpTimeout.setTiming(msec); ptStartUpTimeout.setTiming(msec);
// ===================== <variables> ===================== // ===================== <variables> =====================
...@@ -292,6 +292,7 @@ void UObject_SK::testMode( bool _state ) ...@@ -292,6 +292,7 @@ void UObject_SK::testMode( bool _state )
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef DISABLE_REST_API #ifndef DISABLE_REST_API
nlohmann::json UObject_SK::httpDumpIO() nlohmann::json UObject_SK::httpDumpIO()
{ {
...@@ -307,7 +308,9 @@ nlohmann::json UObject_SK::httpDumpIO() ...@@ -307,7 +308,9 @@ nlohmann::json UObject_SK::httpDumpIO()
return std::move(jdata); return std::move(jdata);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#endif // #ifndef DISABLE_REST_API #endif
std::string UObject_SK::dumpIO() std::string UObject_SK::dumpIO()
{ {
ostringstream s; ostringstream s;
...@@ -415,22 +418,42 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm ) ...@@ -415,22 +418,42 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm )
} }
case SystemMessage::StartUp: case SystemMessage::StartUp:
{ {
if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() ) ostate = "StartUp...";
try
{ {
myinfo << myname << "(preSysCommand): run log server " << logserv_host << ":" << logserv_port << endl; if( !logserv_host.empty() && logserv_port != 0 && !logserv->isRunning() )
logserv->run(logserv_host, logserv_port, true); {
ostate = "StartUp: run log server...";
myinfo << myname << "(preSysCommand): run log server " << logserv_host << ":" << logserv_port << endl;
logserv->run(logserv_host, logserv_port, true);
}
}
catch( std::exception& ex )
{
mywarn << myname << "(preSysCommand): CAN`t run log server err: " << ex.what() << endl;
}
catch( ... )
{
mywarn << myname << "(preSysCommand): CAN`t run log server err: catch ..." << endl;
} }
ostate = "StartUp: wait sm ready..";
waitSM(smReadyTimeout); waitSM(smReadyTimeout);
ptStartUpTimeout.reset(); ptStartUpTimeout.reset();
// т.к. для io-переменных важно соблюдать последовательность! // т.к. для io-переменных важно соблюдать последовательность!
// сперва обновить входы.. // сперва обновить входы..
ostate = "StartUp: update values..";
updateValues(); updateValues();
ostate = "StartUp: init from SM..";
initFromSM(); // потом обновить значения переменных, помеченных как инициализируемые из SM initFromSM(); // потом обновить значения переменных, помеченных как инициализируемые из SM
ostate = "StartUp: update outputs..";
updateOutputs(true); // а потом уже выходы (принудительное обновление) updateOutputs(true); // а потом уже выходы (принудительное обновление)
ostate = "StartUp: pre ask sensors..";
preAskSensors(UniversalIO::UIONotify); preAskSensors(UniversalIO::UIONotify);
ostate = "StartUp: ask sensors..";
askSensors(UniversalIO::UIONotify); askSensors(UniversalIO::UIONotify);
active = true; active = true;
ostate = "StartUp: [OK]";
break; break;
} }
...@@ -453,8 +476,19 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm ) ...@@ -453,8 +476,19 @@ void UObject_SK::preSysCommand( const SystemMessage* _sm )
if( logserv && !logserv_host.empty() && logserv_port != 0 ) if( logserv && !logserv_host.empty() && logserv_port != 0 )
{ {
mylogany << myname << "(preSysCommand): try restart logserver.." << endl; try
logserv->check(true); {
mylogany << myname << "(preSysCommand): try restart logserver.." << endl;
logserv->check(true);
}
catch( std::exception& ex )
{
mywarn << myname << "(preSysCommand): CAN`t restart log server err: " << ex.what() << endl;
}
catch( ... )
{
mywarn << myname << "(preSysCommand): CAN`t restart log server err: catch ..." << endl;
}
} }
} }
break; break;
...@@ -474,6 +508,8 @@ uniset::SimpleInfo* UObject_SK::getInfo( CORBA::Long userparam ) ...@@ -474,6 +508,8 @@ uniset::SimpleInfo* UObject_SK::getInfo( CORBA::Long userparam )
ostringstream inf; ostringstream inf;
inf << i->info << endl; inf << i->info << endl;
inf << "initialization: " << ostate << endl;
if( logserv /* && userparam < 0 */ ) if( logserv /* && userparam < 0 */ )
{ {
inf << "LogServer: " << logserv_host << ":" << logserv_port inf << "LogServer: " << logserv_host << ":" << logserv_port
...@@ -506,6 +542,7 @@ uniset::SimpleInfo* UObject_SK::getInfo( CORBA::Long userparam ) ...@@ -506,6 +542,7 @@ uniset::SimpleInfo* UObject_SK::getInfo( CORBA::Long userparam )
return i._retn(); return i._retn();
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef DISABLE_REST_API #ifndef DISABLE_REST_API
nlohmann::json UObject_SK::httpGet( const Poco::URI::QueryParameters& params ) nlohmann::json UObject_SK::httpGet( const Poco::URI::QueryParameters& params )
{ {
...@@ -587,14 +624,14 @@ nlohmann::json UObject_SK::httpRequest( const std::string& req, const Poco::URI: ...@@ -587,14 +624,14 @@ nlohmann::json UObject_SK::httpRequest( const std::string& req, const Poco::URI:
nlohmann::json UObject_SK::httpRequestLog( const Poco::URI::QueryParameters& p ) nlohmann::json UObject_SK::httpRequestLog( const Poco::URI::QueryParameters& p )
{ {
nlohmann::json jret; nlohmann::json jret;
auto& jdata = jret[myname]; jret[myname]["log"] = Debug::str(mylog->level());
jdata["log"] = Debug::str(mylog->level());
return std::move(jret); return std::move(jret);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#endif // #ifndef DISABLE_REST_API #endif
// -----------------------------------------------------------------------------
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void UObject_SK::sigterm( int signo ) void UObject_SK::sigterm( int signo )
{ {
...@@ -645,10 +682,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID ) ...@@ -645,10 +682,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
<< wait_msec << " мсек"; << wait_msec << " мсек";
mycrit << err.str() << endl; mycrit << err.str() << endl;
// terminate(); std::abort();
// abort();
// raise(SIGTERM);
std::terminate();
// throw uniset::SystemError(err.str()); // throw uniset::SystemError(err.str());
} }
...@@ -660,10 +694,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID ) ...@@ -660,10 +694,7 @@ void UObject_SK::waitSM( int wait_msec, ObjectId _testID )
<< wait_msec << " мсек"; << wait_msec << " мсек";
mycrit << err.str() << endl; mycrit << err.str() << endl;
// terminate(); std::abort();
// abort();
//raise(SIGTERM);
std::terminate();
// throw uniset::SystemError(err.str()); // throw uniset::SystemError(err.str());
} }
} }
......
...@@ -7,6 +7,7 @@ from pyUniSet import * ...@@ -7,6 +7,7 @@ from pyUniSet import *
from pyUConnector import * from pyUConnector import *
from pyUModbus import * from pyUModbus import *
from UGlobal import * from UGlobal import *
from pyUExceptions import *
class UInterface(): class UInterface():
...@@ -74,7 +75,7 @@ class UInterface(): ...@@ -74,7 +75,7 @@ class UInterface():
except UException, e: except UException, e:
return [False,"%s"%e.getError()] return [False,"%s"%e.getError()]
raise [False, "Unknown interface %s" % self.itype] return [False, "Unknown interface %s" % self.itype]
def getValue(self, s_id): def getValue(self, s_id):
......
...@@ -3012,10 +3012,11 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { ...@@ -3012,10 +3012,11 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) {
#define SWIGTYPE_p_USysError swig_types[2] #define SWIGTYPE_p_USysError swig_types[2]
#define SWIGTYPE_p_UTimeOut swig_types[3] #define SWIGTYPE_p_UTimeOut swig_types[3]
#define SWIGTYPE_p_UTypes__Params swig_types[4] #define SWIGTYPE_p_UTypes__Params swig_types[4]
#define SWIGTYPE_p_char swig_types[5] #define SWIGTYPE_p_UValidateError swig_types[5]
#define SWIGTYPE_p_p_char swig_types[6] #define SWIGTYPE_p_char swig_types[6]
static swig_type_info *swig_types[8]; #define SWIGTYPE_p_p_char swig_types[7]
static swig_module_info swig_module = {swig_types, 7, 0, 0, 0, 0}; static swig_type_info *swig_types[9];
static swig_module_info swig_module = {swig_types, 8, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
...@@ -4588,6 +4589,109 @@ SWIGINTERN PyObject *USysError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyOb ...@@ -4588,6 +4589,109 @@ SWIGINTERN PyObject *USysError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyOb
return SWIG_Py_Void(); return SWIG_Py_Void();
} }
SWIGINTERN PyObject *_wrap_new_UValidateError__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
UValidateError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)":new_UValidateError")) SWIG_fail;
result = (UValidateError *)new UValidateError();
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UValidateError, SWIG_POINTER_NEW | 0 );
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_new_UValidateError__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
std::string *arg1 = 0 ;
int res1 = SWIG_OLDOBJ ;
PyObject * obj0 = 0 ;
UValidateError *result = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:new_UValidateError",&obj0)) SWIG_fail;
{
std::string *ptr = (std::string *)0;
res1 = SWIG_AsPtr_std_string(obj0, &ptr);
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_UValidateError" "', argument " "1"" of type '" "std::string const &""'");
}
if (!ptr) {
SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_UValidateError" "', argument " "1"" of type '" "std::string const &""'");
}
arg1 = ptr;
}
result = (UValidateError *)new UValidateError((std::string const &)*arg1);
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_UValidateError, SWIG_POINTER_NEW | 0 );
if (SWIG_IsNewObj(res1)) delete arg1;
return resultobj;
fail:
if (SWIG_IsNewObj(res1)) delete arg1;
return NULL;
}
SWIGINTERN PyObject *_wrap_new_UValidateError(PyObject *self, PyObject *args) {
Py_ssize_t argc;
PyObject *argv[2] = {
0
};
Py_ssize_t ii;
if (!PyTuple_Check(args)) SWIG_fail;
argc = args ? PyObject_Length(args) : 0;
for (ii = 0; (ii < 1) && (ii < argc); ii++) {
argv[ii] = PyTuple_GET_ITEM(args,ii);
}
if (argc == 0) {
return _wrap_new_UValidateError__SWIG_0(self, args);
}
if (argc == 1) {
int _v;
int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
_v = SWIG_CheckState(res);
if (_v) {
return _wrap_new_UValidateError__SWIG_1(self, args);
}
}
fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_UValidateError'.\n"
" Possible C/C++ prototypes are:\n"
" UValidateError::UValidateError()\n"
" UValidateError::UValidateError(std::string const &)\n");
return 0;
}
SWIGINTERN PyObject *_wrap_delete_UValidateError(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
UValidateError *arg1 = (UValidateError *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:delete_UValidateError",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_UValidateError, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_UValidateError" "', argument " "1"" of type '" "UValidateError *""'");
}
arg1 = reinterpret_cast< UValidateError * >(argp1);
delete arg1;
resultobj = SWIG_Py_Void();
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *UValidateError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_UValidateError, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
SWIGINTERN PyObject *_wrap_new_UProxyObject__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { SWIGINTERN PyObject *_wrap_new_UProxyObject__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0; PyObject *resultobj = 0;
std::string *arg1 = 0 ; std::string *arg1 = 0 ;
...@@ -4997,6 +5101,9 @@ static PyMethodDef SwigMethods[] = { ...@@ -4997,6 +5101,9 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"new_USysError", _wrap_new_USysError, METH_VARARGS, NULL}, { (char *)"new_USysError", _wrap_new_USysError, METH_VARARGS, NULL},
{ (char *)"delete_USysError", _wrap_delete_USysError, METH_VARARGS, NULL}, { (char *)"delete_USysError", _wrap_delete_USysError, METH_VARARGS, NULL},
{ (char *)"USysError_swigregister", USysError_swigregister, METH_VARARGS, NULL}, { (char *)"USysError_swigregister", USysError_swigregister, METH_VARARGS, NULL},
{ (char *)"new_UValidateError", _wrap_new_UValidateError, METH_VARARGS, NULL},
{ (char *)"delete_UValidateError", _wrap_delete_UValidateError, METH_VARARGS, NULL},
{ (char *)"UValidateError_swigregister", UValidateError_swigregister, METH_VARARGS, NULL},
{ (char *)"new_UProxyObject", _wrap_new_UProxyObject, METH_VARARGS, NULL}, { (char *)"new_UProxyObject", _wrap_new_UProxyObject, METH_VARARGS, NULL},
{ (char *)"delete_UProxyObject", _wrap_delete_UProxyObject, METH_VARARGS, NULL}, { (char *)"delete_UProxyObject", _wrap_delete_UProxyObject, METH_VARARGS, NULL},
{ (char *)"UProxyObject_addToAsk", _wrap_UProxyObject_addToAsk, METH_VARARGS, NULL}, { (char *)"UProxyObject_addToAsk", _wrap_UProxyObject_addToAsk, METH_VARARGS, NULL},
...@@ -5020,11 +5127,15 @@ static void *_p_UTimeOutTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory)) ...@@ -5020,11 +5127,15 @@ static void *_p_UTimeOutTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory))
static void *_p_USysErrorTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory)) { static void *_p_USysErrorTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory)) {
return (void *)((UException *) ((USysError *) x)); return (void *)((UException *) ((USysError *) x));
} }
static void *_p_UValidateErrorTo_p_UException(void *x, int *SWIGUNUSEDPARM(newmemory)) {
return (void *)((UException *) ((UValidateError *) x));
}
static swig_type_info _swigt__p_UException = {"_p_UException", "UException *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_UException = {"_p_UException", "UException *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UProxyObject = {"_p_UProxyObject", "UProxyObject *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_UProxyObject = {"_p_UProxyObject", "UProxyObject *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_USysError = {"_p_USysError", "USysError *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_USysError = {"_p_USysError", "USysError *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UTimeOut = {"_p_UTimeOut", "UTimeOut *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_UTimeOut = {"_p_UTimeOut", "UTimeOut *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UTypes__Params = {"_p_UTypes__Params", "UTypes::Params *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_UTypes__Params = {"_p_UTypes__Params", "UTypes::Params *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_UValidateError = {"_p_UValidateError", "UValidateError *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
...@@ -5034,15 +5145,17 @@ static swig_type_info *swig_type_initial[] = { ...@@ -5034,15 +5145,17 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_USysError, &_swigt__p_USysError,
&_swigt__p_UTimeOut, &_swigt__p_UTimeOut,
&_swigt__p_UTypes__Params, &_swigt__p_UTypes__Params,
&_swigt__p_UValidateError,
&_swigt__p_char, &_swigt__p_char,
&_swigt__p_p_char, &_swigt__p_p_char,
}; };
static swig_cast_info _swigc__p_UException[] = { {&_swigt__p_UException, 0, 0, 0}, {&_swigt__p_UTimeOut, _p_UTimeOutTo_p_UException, 0, 0}, {&_swigt__p_USysError, _p_USysErrorTo_p_UException, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_UException[] = { {&_swigt__p_UException, 0, 0, 0}, {&_swigt__p_UTimeOut, _p_UTimeOutTo_p_UException, 0, 0}, {&_swigt__p_USysError, _p_USysErrorTo_p_UException, 0, 0}, {&_swigt__p_UValidateError, _p_UValidateErrorTo_p_UException, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UProxyObject[] = { {&_swigt__p_UProxyObject, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_UProxyObject[] = { {&_swigt__p_UProxyObject, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_USysError[] = { {&_swigt__p_USysError, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_USysError[] = { {&_swigt__p_USysError, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UTimeOut[] = { {&_swigt__p_UTimeOut, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_UTimeOut[] = { {&_swigt__p_UTimeOut, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UTypes__Params[] = { {&_swigt__p_UTypes__Params, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_UTypes__Params[] = { {&_swigt__p_UTypes__Params, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_UValidateError[] = { {&_swigt__p_UValidateError, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
...@@ -5052,6 +5165,7 @@ static swig_cast_info *swig_cast_initial[] = { ...@@ -5052,6 +5165,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_USysError, _swigc__p_USysError,
_swigc__p_UTimeOut, _swigc__p_UTimeOut,
_swigc__p_UTypes__Params, _swigc__p_UTypes__Params,
_swigc__p_UValidateError,
_swigc__p_char, _swigc__p_char,
_swigc__p_p_char, _swigc__p_p_char,
}; };
......
...@@ -221,6 +221,28 @@ class USysError(UException): ...@@ -221,6 +221,28 @@ class USysError(UException):
USysError_swigregister = _pyUniSet.USysError_swigregister USysError_swigregister = _pyUniSet.USysError_swigregister
USysError_swigregister(USysError) USysError_swigregister(USysError)
class UValidateError(UException):
__swig_setmethods__ = {}
for _s in [UException]:
__swig_setmethods__.update(getattr(_s, '__swig_setmethods__', {}))
__setattr__ = lambda self, name, value: _swig_setattr(self, UValidateError, name, value)
__swig_getmethods__ = {}
for _s in [UException]:
__swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
__getattr__ = lambda self, name: _swig_getattr(self, UValidateError, name)
__repr__ = _swig_repr
def __init__(self, *args):
this = _pyUniSet.new_UValidateError(*args)
try:
self.this.append(this)
except Exception:
self.this = this
__swig_destroy__ = _pyUniSet.delete_UValidateError
__del__ = lambda self: None
UValidateError_swigregister = _pyUniSet.UValidateError_swigregister
UValidateError_swigregister(UValidateError)
class UProxyObject: class UProxyObject:
__swig_setmethods__ = {} __swig_setmethods__ = {}
__setattr__ = lambda self, name, value: _swig_setattr(self, UProxyObject, name, value) __setattr__ = lambda self, name, value: _swig_setattr(self, UProxyObject, name, value)
......
...@@ -203,7 +203,7 @@ void LogServer::evprepare( const ev::loop_ref& eloop ) ...@@ -203,7 +203,7 @@ void LogServer::evprepare( const ev::loop_ref& eloop )
if( mylog.is_crit() ) if( mylog.is_crit() )
mylog.crit() << err.str() << endl; mylog.crit() << err.str() << endl;
throw SystemError( err.str() ); throw uniset::SystemError( err.str() );
} }
try try
...@@ -219,7 +219,17 @@ void LogServer::evprepare( const ev::loop_ref& eloop ) ...@@ -219,7 +219,17 @@ void LogServer::evprepare( const ev::loop_ref& eloop )
if( mylog.is_crit() ) if( mylog.is_crit() )
mylog.crit() << err.str() << endl; mylog.crit() << err.str() << endl;
throw SystemError( err.str() ); throw uniset::SystemError( err.str() );
}
catch( std::exception& ex )
{
ostringstream err;
err << myname << "(evprepare): " << ex.what();
if( mylog.is_crit() )
mylog.crit() << err.str() << endl;
throw uniset::SystemError( err.str() );
} }
sock->setBlocking(false); sock->setBlocking(false);
......
...@@ -257,7 +257,7 @@ void LogSession::callback( ev::io& watcher, int revents ) noexcept ...@@ -257,7 +257,7 @@ void LogSession::callback( ev::io& watcher, int revents ) noexcept
if( cancelled.load() ) if( cancelled.load() )
{ {
if( mylog.is_info() ) if( mylog.is_info() )
mylog.info() << peername << "LogSession: stop session... disconnect.." << endl; mylog.info() << peername << "(LogSession): stop session... disconnect.." << endl;
io.stop(); io.stop();
cmdTimer.stop(); cmdTimer.stop();
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sstream> #include <sstream>
#include <chrono> #include <chrono>
#include <Poco/Process.h>
#include "Exceptions.h" #include "Exceptions.h"
#include "ORepHelpers.h" #include "ORepHelpers.h"
...@@ -633,7 +634,7 @@ void UniSetObject::work() ...@@ -633,7 +634,7 @@ void UniSetObject::work()
{ {
uinfo << myname << ": thread processing messages running..." << endl; uinfo << myname << ": thread processing messages running..." << endl;
msgpid = thr ? thr->getTID() : getpid(); msgpid = thr ? thr->getTID() : Poco::Process::id();
{ {
std::unique_lock<std::mutex> locker(m_working); std::unique_lock<std::mutex> locker(m_working);
...@@ -748,7 +749,8 @@ uniset::SimpleInfo* UniSetObject::getInfo( ::CORBA::Long userparam ) ...@@ -748,7 +749,8 @@ uniset::SimpleInfo* UniSetObject::getInfo( ::CORBA::Long userparam )
ostringstream info; ostringstream info;
info.setf(ios::left, ios::adjustfield); info.setf(ios::left, ios::adjustfield);
info << "(" << myid << ")" << setw(40) << myname << "\n==================================================\n"; info << "(" << myid << ")" << setw(40) << myname << "\n==================================================\n";
info << "tid=" << setw(10); info << "pid=" << setw(10) << Poco::Process::id();
info << " tid=" << setw(10);
if( threadcreate ) if( threadcreate )
{ {
......
...@@ -38,8 +38,18 @@ bool CommonEventLoop::evrun(EvWatcher* w, bool thread ) ...@@ -38,8 +38,18 @@ bool CommonEventLoop::evrun(EvWatcher* w, bool thread )
bool ret = false; bool ret = false;
{ {
std::unique_lock<std::mutex> l(wlist_mutex); {
wlist.push_back(w); std::unique_lock<std::mutex> l(wlist_mutex);
for( auto& e: wlist )
{
if( e == w )
{
cerr << "(CommonEventLoop::evrun): " << w->wname() << " ALREADY ADDED.." << endl;
return false;
}
}
wlist.push_back(w);
}
if( !thr ) if( !thr )
{ {
...@@ -47,18 +57,24 @@ bool CommonEventLoop::evrun(EvWatcher* w, bool thread ) ...@@ -47,18 +57,24 @@ bool CommonEventLoop::evrun(EvWatcher* w, bool thread )
std::this_thread::sleep_for(std::chrono::milliseconds(30)); std::this_thread::sleep_for(std::chrono::milliseconds(30));
} }
// ожидаем обработки evprepare (которая будет в defaultLoop) std::unique_lock<std::mutex> locker(prep_mutex);
wprep = w; wprep = w;
prep_notify = false;
evprep.send(); // будим default loop evprep.send(); // будим default loop
// ждём.. // ожидаем обработки evprepare (которая будет в defaultLoop)
std::unique_lock<std::mutex> locker(prep_mutex);
while( !prep_notify ) while( !prep_notify )
prep_event.wait(locker); {
prep_event.wait_for(locker,std::chrono::milliseconds(5000), [=]()
{
return (prep_notify == true);
} );
}
// сбрасываем флаг
prep_notify = false; prep_notify = false;
// если стал nullptr - значит evprepare отработал нормально
// если wprep стал nullptr - значит evprepare отработал нормально
ret = ( wprep == nullptr ); ret = ( wprep == nullptr );
} }
...@@ -125,18 +141,22 @@ bool CommonEventLoop::evstop( EvWatcher* w ) ...@@ -125,18 +141,22 @@ bool CommonEventLoop::evstop( EvWatcher* w )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void CommonEventLoop::onPrepare() noexcept void CommonEventLoop::onPrepare() noexcept
{ {
if( wprep ) prep_notify = false;
{ {
try std::unique_lock<std::mutex> lock(prep_mutex);
if( wprep )
{ {
wprep->evprepare(loop); try
{
wprep->evprepare(loop);
}
catch( std::exception& ex )
{
cerr << "(CommonEventLoop::onPrepare): evprepare err: " << ex.what() << endl;
}
wprep = nullptr;
} }
catch( std::exception& ex )
{
cerr << "(CommonEventLoop::onPrepare): evprepare err: " << ex.what() << endl;
}
wprep = nullptr;
} }
// будим всех ожидающих.. // будим всех ожидающих..
......
...@@ -116,7 +116,10 @@ void UniSetTimer::stop() noexcept ...@@ -116,7 +116,10 @@ void UniSetTimer::stop() noexcept
const Poco::Timespan UniSetTimer::millisecToPoco( const timeout_t msec ) noexcept const Poco::Timespan UniSetTimer::millisecToPoco( const timeout_t msec ) noexcept
{ {
if( msec == WaitUpTime ) if( msec == WaitUpTime )
return Poco::Timespan(-1, 0); {
// int days, int hours, int minutes, int seconds, int microSeconds
return Poco::Timespan(std::numeric_limits<int>::max(),0,0,0,0);
}
// msec --> usec // msec --> usec
return Poco::Timespan( long(msec / 1000), long((msec * 1000) % 1000000) ); return Poco::Timespan( long(msec / 1000), long((msec * 1000) % 1000000) );
...@@ -125,7 +128,10 @@ const Poco::Timespan UniSetTimer::millisecToPoco( const timeout_t msec ) noexcep ...@@ -125,7 +128,10 @@ const Poco::Timespan UniSetTimer::millisecToPoco( const timeout_t msec ) noexcep
const Poco::Timespan UniSetTimer::microsecToPoco( const timeout_t usec ) noexcept const Poco::Timespan UniSetTimer::microsecToPoco( const timeout_t usec ) noexcept
{ {
if( usec == WaitUpTime ) if( usec == WaitUpTime )
return Poco::Timespan(-1, 0); {
// int days, int hours, int minutes, int seconds, int microSeconds
return Poco::Timespan(std::numeric_limits<int>::max(),0,0,0,0);
}
return Poco::Timespan( long(usec / 1000000), long(usec % 1000000) ); return Poco::Timespan( long(usec / 1000000), long(usec % 1000000) );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment