Есть дополнительный поток, в котором происходит циклическое перемещение прожектора в одной из плоскостей. В этом потоке есть переменная
int number_rotate, которая отвечает за количество вращений в цикле. После каждого перемещения она уменьшает свое значение.
Как мне корректно отправить сигнал о том, что переменная изменила значение? И как в основном потоке его поймать?
/// Класс потока - вращение вокруг вертикальной оси заданное количество раз
class HorizontalRotation: public QThread
{
Q_OBJECT
/// есть и другие переменные и функции конечно же
private:
int number_rotate; ///< количество вращений
protected:
virtual void run();
};
/// Запуск потока вращения в горизонтальной плоскости
void HorizontalRotation::run()
{
if(!number_rotate) return;
int geted_azimuth = VALFROMBYTES(inf_from_ed_packet.high_azim, inf_from_ed_packet.low_azim);
int azimuth = 172 * 10; ///< правый предел прожектора
if(geted_azimuth < ((172. - 1.5) * 10) || geted_azimuth > ((172. + 1.5) * 10))
{
inf_to_ed_packet.low_azim = LOWBYTE(azimuth);
inf_to_ed_packet.high_azim = HIGHBYTE(azimuth); ///< перевод в этот предел прожектора
if(imitTsl) imitTsl -> writeFromCtrlAutoPage();
}
readAzimuth(geted_azimuth, 172.);
/// внешний цикл по количеству перемещений
const int number_cycles = number_rotate;
for(register int i=0; i<number_cycles; ++i)
{
azimuth = -172 * 10;
inf_to_ed_packet.low_azim = LOWBYTE(azimuth);
inf_to_ed_packet.high_azim = HIGHBYTE(azimuth);
if(imitTsl) imitTsl -> writeFromCtrlAutoPage();
readAzimuth(geted_azimuth, -172.);
azimuth = 172 * 10;
inf_to_ed_packet.low_azim = LOWBYTE(azimuth);
inf_to_ed_packet.high_azim = HIGHBYTE(azimuth);
if(imitTsl) imitTsl -> writeFromCtrlAutoPage();
readAzimuth(geted_azimuth, 172.);
--number_rotate;
}
if(!number_rotate) quit();
}
--number_rotate;
- вот строчка изменения значения переменной.