Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
4dcae342
Commit
4dcae342
authored
Aug 07, 2016
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(SharedMemory): рефакторинг, оптимизация
parent
913eb480
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
61 additions
and
33 deletions
+61
-33
SharedMemory.cc
extensions/SharedMemory/SharedMemory.cc
+32
-19
SharedMemory.h
extensions/SharedMemory/SharedMemory.h
+12
-5
IOController.h
include/IOController.h
+4
-5
IONotifyController.h
include/IONotifyController.h
+2
-0
IOController.cc
src/Processes/IOController.cc
+2
-3
IONotifyController.cc
src/Processes/IONotifyController.cc
+6
-0
NCRestorer.cc
src/Processes/NCRestorer.cc
+3
-1
No files found.
extensions/SharedMemory/SharedMemory.cc
View file @
4dcae342
...
@@ -298,7 +298,7 @@ bool SharedMemory::activateObject()
...
@@ -298,7 +298,7 @@ bool SharedMemory::activateObject()
res
=
IONotifyController
::
activateObject
();
res
=
IONotifyController
::
activateObject
();
// инициализируем указатели
// инициализируем указатели
for
(
auto
&&
it
:
hlist
)
for
(
auto
&&
it
:
h
b
list
)
{
{
it
.
a_it
=
myioEnd
();
it
.
a_it
=
myioEnd
();
it
.
d_it
=
myioEnd
();
it
.
d_it
=
myioEnd
();
...
@@ -312,6 +312,14 @@ bool SharedMemory::activateObject()
...
@@ -312,6 +312,14 @@ bool SharedMemory::activateObject()
hit
.
ioit
=
myioEnd
();
hit
.
ioit
=
myioEnd
();
}
}
for
(
auto
&&
it
:
histmap
)
{
auto
i
=
myiofind
(
it
.
first
);
if
(
i
!=
myioEnd
()
)
i
->
second
->
userdata
[
udataHistory
]
=
(
void
*
)(
&
(
it
.
second
));
}
// здесь или в startUp?
// здесь или в startUp?
initFromReserv
();
initFromReserv
();
...
@@ -342,7 +350,7 @@ void SharedMemory::sigterm( int signo )
...
@@ -342,7 +350,7 @@ void SharedMemory::sigterm( int signo )
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
void
SharedMemory
::
checkHeartBeat
()
void
SharedMemory
::
checkHeartBeat
()
{
{
if
(
hlist
.
empty
()
)
if
(
h
b
list
.
empty
()
)
{
{
if
(
wdt
&&
workready
)
if
(
wdt
&&
workready
)
wdt
->
ping
();
wdt
->
ping
();
...
@@ -352,7 +360,7 @@ void SharedMemory::checkHeartBeat()
...
@@ -352,7 +360,7 @@ void SharedMemory::checkHeartBeat()
bool
wdtpingOK
=
true
;
bool
wdtpingOK
=
true
;
for
(
auto
&&
it
:
hlist
)
for
(
auto
&&
it
:
h
b
list
)
{
{
try
try
{
{
...
@@ -480,7 +488,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato
...
@@ -480,7 +488,7 @@ bool SharedMemory::readItem( const std::shared_ptr<UniXML>& xml, UniXML::iterato
// без проверки на дублирование т.к.
// без проверки на дублирование т.к.
// id - гарантирует уникальность в нашем configure.xml
// id - гарантирует уникальность в нашем configure.xml
hlist
.
push_back
(
hi
);
h
b
list
.
push_back
(
hi
);
return
true
;
return
true
;
}
}
...
@@ -560,7 +568,7 @@ void SharedMemory::readEventList( const std::string& oname )
...
@@ -560,7 +568,7 @@ void SharedMemory::readEventList( const std::string& oname )
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
SharedMemory
::
sendEvent
(
UniSetTypes
::
SystemMessage
&
sm
)
void
SharedMemory
::
sendEvent
(
UniSetTypes
::
SystemMessage
&
sm
)
{
{
TransportMessage
tm
(
sm
.
transport_msg
()
);
TransportMessage
tm
(
std
::
move
(
sm
.
transport_msg
())
);
for
(
const
auto
&
it
:
elst
)
for
(
const
auto
&
it
:
elst
)
{
{
...
@@ -739,37 +747,42 @@ void SharedMemory::saveHistory()
...
@@ -739,37 +747,42 @@ void SharedMemory::saveHistory()
}
}
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
SharedMemory
::
updateHistory
(
std
::
shared_ptr
<
USensorInfo
>&
s_it
,
IOController
*
)
void
SharedMemory
::
updateHistory
(
std
::
shared_ptr
<
USensorInfo
>&
usi
,
IOController
*
)
{
{
if
(
hist
.
empty
()
)
if
(
hist
.
empty
()
)
return
;
return
;
auto
i
=
histmap
.
find
(
s_it
->
si
.
id
);
if
(
usi
->
userdata
[
udataHistory
]
==
nullptr
)
if
(
i
==
histmap
.
end
()
)
return
;
return
;
HistoryItList
&
lst
=
*
(
static_cast
<
HistoryItList
*>
(
usi
->
userdata
[
udataHistory
]));
// auto i = histmap.find(s_it->si.id);
//
// if( i == histmap.end() )
// return;
long
value
=
0
;
long
value
=
0
;
long
sm_tv_sec
=
0
;
long
sm_tv_sec
=
0
;
long
sm_tv_usec
=
0
;
long
sm_tv_usec
=
0
;
{
{
uniset_rwmutex_rlock
lock
(
s_it
->
val_lock
);
uniset_rwmutex_rlock
lock
(
usi
->
val_lock
);
value
=
s_it
->
value
;
value
=
usi
->
value
;
sm_tv_sec
=
s_it
->
tv_sec
;
sm_tv_sec
=
usi
->
tv_sec
;
sm_tv_usec
=
s_it
->
tv_usec
;
sm_tv_usec
=
usi
->
tv_usec
;
}
}
sminfo
<<
myname
<<
"(updateHistory): "
sminfo
<<
myname
<<
"(updateHistory): "
<<
" sid="
<<
s_it
->
si
.
id
<<
" sid="
<<
usi
->
si
.
id
<<
" value="
<<
value
<<
" value="
<<
value
<<
endl
;
<<
endl
;
for
(
auto
&&
it1
:
i
->
second
)
for
(
auto
&&
it1
:
lst
)
{
{
History
::
iterator
it
=
it1
;
History
::
iterator
it
=
it1
;
if
(
s_it
->
type
==
UniversalIO
::
DI
||
if
(
usi
->
type
==
UniversalIO
::
DI
||
s_it
->
type
==
UniversalIO
::
DO
)
usi
->
type
==
UniversalIO
::
DO
)
{
{
bool
st
=
(
bool
)
value
;
bool
st
=
(
bool
)
value
;
...
@@ -785,8 +798,8 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll
...
@@ -785,8 +798,8 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& s_it, IOControll
m_historySignal
.
emit
(
(
*
it
)
);
m_historySignal
.
emit
(
(
*
it
)
);
}
}
}
}
else
if
(
s_it
->
type
==
UniversalIO
::
AI
||
else
if
(
usi
->
type
==
UniversalIO
::
AI
||
s_it
->
type
==
UniversalIO
::
AO
)
usi
->
type
==
UniversalIO
::
AO
)
{
{
if
(
!
it
->
fuse_use_val
)
if
(
!
it
->
fuse_use_val
)
{
{
...
...
extensions/SharedMemory/SharedMemory.h
View file @
4dcae342
...
@@ -317,7 +317,6 @@ class SharedMemory:
...
@@ -317,7 +317,6 @@ class SharedMemory:
void
addReadItem
(
Restorer_XML
::
ReaderSlot
sl
);
void
addReadItem
(
Restorer_XML
::
ReaderSlot
sl
);
// ------------ HISTORY --------------------
// ------------ HISTORY --------------------
typedef
std
::
deque
<
long
>
HBuffer
;
typedef
std
::
deque
<
long
>
HBuffer
;
...
@@ -326,7 +325,7 @@ class SharedMemory:
...
@@ -326,7 +325,7 @@ class SharedMemory:
explicit
HistoryItem
(
size_t
bufsize
=
0
)
:
id
(
UniSetTypes
::
DefaultObjectId
),
buf
(
bufsize
)
{}
explicit
HistoryItem
(
size_t
bufsize
=
0
)
:
id
(
UniSetTypes
::
DefaultObjectId
),
buf
(
bufsize
)
{}
HistoryItem
(
const
UniSetTypes
::
ObjectId
_id
,
const
size_t
bufsize
,
const
long
val
)
:
id
(
_id
),
buf
(
bufsize
,
val
)
{}
HistoryItem
(
const
UniSetTypes
::
ObjectId
_id
,
const
size_t
bufsize
,
const
long
val
)
:
id
(
_id
),
buf
(
bufsize
,
val
)
{}
inline
void
init
(
unsigned
in
t
size
,
long
val
)
inline
void
init
(
size_
t
size
,
long
val
)
{
{
if
(
size
>
0
)
if
(
size
>
0
)
buf
.
assign
(
size
,
val
);
buf
.
assign
(
size
,
val
);
...
@@ -339,7 +338,7 @@ class SharedMemory:
...
@@ -339,7 +338,7 @@ class SharedMemory:
void
add
(
long
val
,
size_t
size
)
void
add
(
long
val
,
size_t
size
)
{
{
// т.
е
. буфер у нас уже заданного размера
// т.
к
. буфер у нас уже заданного размера
// то просто удаляем очередную точку в начале
// то просто удаляем очередную точку в начале
// и добавляем в конце
// и добавляем в конце
buf
.
pop_front
();
buf
.
pop_front
();
...
@@ -388,6 +387,14 @@ class SharedMemory:
...
@@ -388,6 +387,14 @@ class SharedMemory:
typedef
std
::
list
<
History
::
iterator
>
HistoryItList
;
typedef
std
::
list
<
History
::
iterator
>
HistoryItList
;
typedef
std
::
unordered_map
<
UniSetTypes
::
ObjectId
,
HistoryItList
>
HistoryFuseMap
;
typedef
std
::
unordered_map
<
UniSetTypes
::
ObjectId
,
HistoryItList
>
HistoryFuseMap
;
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет
//! использовать userdata[2]. (0,1 - использует IONotifyController)
// оптимизация с использованием userdata (IOController::USensorInfo::userdata) нужна
// чтобы не использовать поиск в HistoryFuseMap (см. updateHistory)
// т.к. 0,1 - использует IONotifyController (см. IONotifyController::UserDataID)
// то используем 2 - в качестве элемента userdata
static
const
size_t
udataHistory
=
2
;
typedef
sigc
::
signal
<
void
,
const
HistoryInfo
&>
HistorySlot
;
typedef
sigc
::
signal
<
void
,
const
HistoryInfo
&>
HistorySlot
;
HistorySlot
signal_history
();
/*!< сигнал о срабатывании условий "сброса" дампа истории */
HistorySlot
signal_history
();
/*!< сигнал о срабатывании условий "сброса" дампа истории */
...
@@ -468,7 +475,7 @@ class SharedMemory:
...
@@ -468,7 +475,7 @@ class SharedMemory:
void
checkHeartBeat
();
void
checkHeartBeat
();
typedef
std
::
list
<
HeartBeatInfo
>
HeartBeatList
;
typedef
std
::
list
<
HeartBeatInfo
>
HeartBeatList
;
HeartBeatList
hlist
;
// список датчиков "сердцебиения"
HeartBeatList
h
b
list
;
// список датчиков "сердцебиения"
std
::
shared_ptr
<
WDTInterface
>
wdt
;
std
::
shared_ptr
<
WDTInterface
>
wdt
;
std
::
atomic_bool
activated
;
std
::
atomic_bool
activated
;
std
::
atomic_bool
workready
;
std
::
atomic_bool
workready
;
...
@@ -488,7 +495,7 @@ class SharedMemory:
...
@@ -488,7 +495,7 @@ class SharedMemory:
History
hist
;
History
hist
;
HistoryFuseMap
histmap
;
/*!< map для оптимизации поиска */
HistoryFuseMap
histmap
;
/*!< map для оптимизации поиска */
virtual
void
updateHistory
(
std
::
shared_ptr
<
IOController
::
USensorInfo
>&
it
,
IOController
*
);
virtual
void
updateHistory
(
std
::
shared_ptr
<
IOController
::
USensorInfo
>&
usi
,
IOController
*
);
virtual
void
saveHistory
();
virtual
void
saveHistory
();
void
buildHistoryList
(
xmlNode
*
cnode
);
void
buildHistoryList
(
xmlNode
*
cnode
);
...
...
include/IOController.h
View file @
4dcae342
...
@@ -285,10 +285,8 @@ class IOController:
...
@@ -285,10 +285,8 @@ class IOController:
// Дополнительные (вспомогательные поля)
// Дополнительные (вспомогательные поля)
UniSetTypes
::
uniset_rwmutex
val_lock
;
/*!< флаг блокирующий работу со значением */
UniSetTypes
::
uniset_rwmutex
val_lock
;
/*!< флаг блокирующий работу со значением */
std
::
shared_ptr
<
USensorInfo
>
it
;
static
const
size_t
MaxUserData
=
4
;
void
*
userdata
[
MaxUserData
]
=
{
nullptr
,
nullptr
,
nullptr
,
nullptr
};
/*!< расширение для возможности хранения своей информации */
static
const
size_t
MaxUserData
=
3
;
void
*
userdata
[
MaxUserData
]
=
{
nullptr
,
nullptr
,
nullptr
};
/*!< расширение для возможности хранения своей информации */
// сигнал для реализации механизма зависимостией..
// сигнал для реализации механизма зависимостией..
// (все зависимые датчики подключаются к нему (см. NCRestorer::init_depends_signals)
// (все зависимые датчики подключаются к нему (см. NCRestorer::init_depends_signals)
...
@@ -301,9 +299,10 @@ class IOController:
...
@@ -301,9 +299,10 @@ class IOController:
IOController_i
::
SensorInfo
d_si
;
/*!< идентификатор датчика, от которого зависит данный */
IOController_i
::
SensorInfo
d_si
;
/*!< идентификатор датчика, от которого зависит данный */
long
d_value
;
/*!< разрешающее работу значение датчика от которого зависит данный */
long
d_value
;
/*!< разрешающее работу значение датчика от которого зависит данный */
long
d_off_value
;
/*!< блокирующее значение */
long
d_off_value
;
/*!< блокирующее значение */
std
::
shared_ptr
<
USensorInfo
>
d_usi
;
// shared_ptr на датчик от которого зависит этот.
// функция обработки информации об изменении состояния датчика, от которого зависит данный
// функция обработки информации об изменении состояния датчика, от которого зависит данный
void
checkDepend
(
std
::
shared_ptr
<
USensorInfo
>&
it
,
IOController
*
);
void
checkDepend
(
std
::
shared_ptr
<
USensorInfo
>&
d_usi
,
IOController
*
);
void
init
(
const
IOController_i
::
SensorIOInfo
&
s
);
void
init
(
const
IOController_i
::
SensorIOInfo
&
s
);
...
...
include/IONotifyController.h
View file @
4dcae342
...
@@ -302,6 +302,8 @@ class IONotifyController:
...
@@ -302,6 +302,8 @@ class IONotifyController:
virtual
void
localSetValue
(
std
::
shared_ptr
<
USensorInfo
>&
usi
,
virtual
void
localSetValue
(
std
::
shared_ptr
<
USensorInfo
>&
usi
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
override
;
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
override
;
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
// идентификаторы данные в userdata (см. USensorInfo::userdata)
// идентификаторы данные в userdata (см. USensorInfo::userdata)
enum
UserDataID
enum
UserDataID
{
{
...
...
src/Processes/IOController.cc
View file @
4dcae342
...
@@ -755,7 +755,6 @@ IOController::ChangeSignal IOController::signal_change_value( UniSetTypes::Objec
...
@@ -755,7 +755,6 @@ IOController::ChangeSignal IOController::signal_change_value( UniSetTypes::Objec
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
}
uniset_rwmutex_rlock
lock
(
it
->
second
->
val_lock
);
return
it
->
second
->
sigChange
;
return
it
->
second
->
sigChange
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
...
@@ -779,7 +778,7 @@ IOController::ChangeUndefinedStateSignal IOController::signal_change_undefined_s
...
@@ -779,7 +778,7 @@ IOController::ChangeUndefinedStateSignal IOController::signal_change_undefined_s
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
}
uniset_rwmutex_rlock
lock
(
it
->
second
->
val_lock
);
//
uniset_rwmutex_rlock lock(it->second->val_lock);
return
it
->
second
->
sigUndefChange
;
return
it
->
second
->
sigUndefChange
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
...
@@ -811,7 +810,7 @@ void IOController::USensorInfo::checkDepend( std::shared_ptr<USensorInfo>& d_it,
...
@@ -811,7 +810,7 @@ void IOController::USensorInfo::checkDepend( std::shared_ptr<USensorInfo>& d_it,
<<
endl
;
<<
endl
;
if
(
changed
)
if
(
changed
)
ic
->
localSetValue
(
it
,
real_value
,
sup_id
);
ic
->
localSetValue
(
d_usi
,
real_value
,
sup_id
);
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
UniSetTypes
::
SimpleInfo
*
IOController
::
getInfo
(
::
CORBA
::
Long
userparam
)
UniSetTypes
::
SimpleInfo
*
IOController
::
getInfo
(
::
CORBA
::
Long
userparam
)
...
...
src/Processes/IONotifyController.cc
View file @
4dcae342
...
@@ -265,6 +265,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
...
@@ -265,6 +265,7 @@ void IONotifyController::ask( AskMap& askLst, const UniSetTypes::ObjectId sid,
if
(
askIterator
!=
askLst
.
end
()
)
if
(
askIterator
!=
askLst
.
end
()
)
{
{
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
auto
s
=
myiofind
(
sid
);
auto
s
=
myiofind
(
sid
);
if
(
s
!=
myioEnd
()
)
if
(
s
!=
myioEnd
()
)
s
->
second
->
userdata
[
udataConsumerList
]
=
(
void
*
)(
&
(
askIterator
->
second
));
s
->
second
->
userdata
[
udataConsumerList
]
=
(
void
*
)(
&
(
askIterator
->
second
));
...
@@ -326,6 +327,7 @@ void IONotifyController::localSetValue( std::shared_ptr<IOController::USensorInf
...
@@ -326,6 +327,7 @@ void IONotifyController::localSetValue( std::shared_ptr<IOController::USensorInf
{
{
uniset_rwmutex_rlock
lock
(
askIOMutex
);
uniset_rwmutex_rlock
lock
(
askIOMutex
);
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
if
(
usi
->
userdata
[
udataConsumerList
]
!=
nullptr
)
if
(
usi
->
userdata
[
udataConsumerList
]
!=
nullptr
)
{
{
ConsumerListInfo
&
lst
=
*
(
static_cast
<
ConsumerListInfo
*>
(
usi
->
userdata
[
udataConsumerList
]));
ConsumerListInfo
&
lst
=
*
(
static_cast
<
ConsumerListInfo
*>
(
usi
->
userdata
[
udataConsumerList
]));
...
@@ -615,6 +617,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
...
@@ -615,6 +617,7 @@ void IONotifyController::askThreshold(UniSetTypes::ObjectId sid, const UniSetTyp
it
=
askTMap
.
find
(
sid
);
it
=
askTMap
.
find
(
sid
);
if
(
li
!=
myioEnd
()
)
if
(
li
!=
myioEnd
()
)
{
{
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
if
(
it
==
askTMap
.
end
()
)
if
(
it
==
askTMap
.
end
()
)
li
->
second
->
userdata
[
udataThresholdList
]
=
nullptr
;
li
->
second
->
userdata
[
udataThresholdList
]
=
nullptr
;
else
else
...
@@ -694,9 +697,11 @@ void IONotifyController::checkThreshold( std::shared_ptr<IOController::USensorIn
...
@@ -694,9 +697,11 @@ void IONotifyController::checkThreshold( std::shared_ptr<IOController::USensorIn
{
{
uniset_rwmutex_rlock
lock
(
trshMutex
);
uniset_rwmutex_rlock
lock
(
trshMutex
);
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
if
(
usi
->
userdata
[
udataThresholdList
]
==
nullptr
)
if
(
usi
->
userdata
[
udataThresholdList
]
==
nullptr
)
return
;
return
;
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
ti
=
static_cast
<
ThresholdsListInfo
*>
(
usi
->
userdata
[
udataThresholdList
]);
ti
=
static_cast
<
ThresholdsListInfo
*>
(
usi
->
userdata
[
udataThresholdList
]);
if
(
ti
->
list
.
empty
()
)
if
(
ti
->
list
.
empty
()
)
return
;
return
;
...
@@ -958,6 +963,7 @@ void IONotifyController::onChangeUndefinedState( std::shared_ptr<USensorInfo>& u
...
@@ -958,6 +963,7 @@ void IONotifyController::onChangeUndefinedState( std::shared_ptr<USensorInfo>& u
{
{
// lock
// lock
uniset_rwmutex_rlock
lock
(
askIOMutex
);
uniset_rwmutex_rlock
lock
(
askIOMutex
);
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
if
(
usi
->
userdata
[
udataConsumerList
]
!=
nullptr
)
if
(
usi
->
userdata
[
udataConsumerList
]
!=
nullptr
)
{
{
ConsumerListInfo
&
lst
=
*
(
static_cast
<
ConsumerListInfo
*>
(
usi
->
userdata
[
udataConsumerList
]));
ConsumerListInfo
&
lst
=
*
(
static_cast
<
ConsumerListInfo
*>
(
usi
->
userdata
[
udataConsumerList
]));
...
...
src/Processes/NCRestorer.cc
View file @
4dcae342
...
@@ -121,6 +121,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, std::shared_ptr<IOCon
...
@@ -121,6 +121,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, std::shared_ptr<IOCon
{
{
auto
i
=
ic
->
myiofind
(
inf
->
si
.
id
);
auto
i
=
ic
->
myiofind
(
inf
->
si
.
id
);
ic
->
askTMap
[
inf
->
si
.
id
].
usi
=
i
->
second
;
ic
->
askTMap
[
inf
->
si
.
id
].
usi
=
i
->
second
;
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
if
(
i
->
second
)
if
(
i
->
second
)
i
->
second
->
userdata
[
IONotifyController
::
udataThresholdList
]
=
&
(
ic
->
askTMap
[
inf
->
si
.
id
]);
i
->
second
->
userdata
[
IONotifyController
::
udataThresholdList
]
=
&
(
ic
->
askTMap
[
inf
->
si
.
id
]);
}
}
...
@@ -176,7 +177,7 @@ void NCRestorer::init_depends_signals( IONotifyController* ic )
...
@@ -176,7 +177,7 @@ void NCRestorer::init_depends_signals( IONotifyController* ic )
for
(
auto
it
=
ic
->
ioList
.
begin
();
it
!=
ic
->
ioList
.
end
();
++
it
)
for
(
auto
it
=
ic
->
ioList
.
begin
();
it
!=
ic
->
ioList
.
end
();
++
it
)
{
{
// обновляем итераторы...
// обновляем итераторы...
it
->
second
->
it
=
it
->
second
;
it
->
second
->
d_usi
=
it
->
second
;
if
(
it
->
second
->
d_si
.
id
==
DefaultObjectId
)
if
(
it
->
second
->
d_si
.
id
==
DefaultObjectId
)
continue
;
continue
;
...
@@ -186,6 +187,7 @@ void NCRestorer::init_depends_signals( IONotifyController* ic )
...
@@ -186,6 +187,7 @@ void NCRestorer::init_depends_signals( IONotifyController* ic )
<<
" dep_name=("
<<
it
->
second
->
d_si
.
id
<<
")'"
<<
uniset_conf
()
->
oind
->
getMapName
(
it
->
second
->
d_si
.
id
)
<<
"'"
<<
" dep_name=("
<<
it
->
second
->
d_si
.
id
<<
")'"
<<
uniset_conf
()
->
oind
->
getMapName
(
it
->
second
->
d_si
.
id
)
<<
"'"
<<
endl
;
<<
endl
;
uniset_rwmutex_rlock
lock
(
it
->
second
->
val_lock
);
ic
->
signal_change_value
(
it
->
second
->
d_si
.
id
).
connect
(
sigc
::
mem_fun
(
it
->
second
.
get
(),
&
IOController
::
USensorInfo
::
checkDepend
)
);
ic
->
signal_change_value
(
it
->
second
->
d_si
.
id
).
connect
(
sigc
::
mem_fun
(
it
->
second
.
get
(),
&
IOController
::
USensorInfo
::
checkDepend
)
);
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment