Есть главное приложение, где выполняется отрисовка карты и траектории. А есть второстепенный поток, который читает файлы(логи) для отрисовки траектории. Как правильно передать управление из одной функции в другую? И вообще как правильнее решить этот вопрос. Вот примеры функций.
class LogReader: public QObject
{
Q_OBJECT
protected:
std::vector<Uint> m_vBlock;
FILE* file;
public:
std::vector<ParamDescr*> rec_descr;
RThread* rthread;
int count_files;
protected:
LOGRECORD ParseBlock();
void ChangeDateTime(LOGRECORD& t, std::string compared_time, std::string compared_date);
std::vector<LOGRECORD> TRead();
};
vector<LOGRECORD> LogReader::TRead()
{
Uint var = (Uint)1E+6;
bool bBlock = false;
bool file_read = false;
vector<LOGRECORD> log;
time_t before_read;
time(&before_read);
while(fread(&var, sizeof(var), 1, file) > 0 && !feof(file))
{
Suint adr = var % 256;
switch(adr)
{
case 0000:
m_vBlock.clear();
bBlock = true;
break;
case 0001:
if(bBlock)
{
LOGRECORD t = ParseBlock();
ChangeDateTime(t, "cur_time", "cur_date");
log.push_back(t);
file_read = true;
time_t contin_read;
time(&contin_read);
time_t delta = contin_read - before_read;
if(delta > 5)
{
rthread -> stop();
}
}
bBlock = false;
break;
default:
if(bBlock)
m_vBlock.push_back(var);
}
}
ShutDown();
if(file_read)
{
--count_files;
rthread -> stop();
}
return log;
}
class RThread: public QThread
{
Q_OBJECT
private:
enum { MAXRECENTFILES = 7 };
volatile bool stopped;
QMutex mutex;
public:
Reader::LogReader* logger;
std::vector<LOGRECORD> read_log;
protected:
void run();
public:
RThread(): stopped(false) {}
void stop();
};
void RThread::run()
{
forever
{
mutex.lock();
if(stopped)
{
stopped = false;
mutex.unlock();
break;
}
read_log = logger -> TRead();
mutex.unlock();
}
}
void RThread::stop()
{
mutex.lock();
stopped = true;
mutex.unlock();
}
Могу пояснить вопрос. Как вот в этом месте
if(delta > 5)
{
rthread -> stop();
}
Перейти в функцию run()?
Сообщение отредактировал Litkevich Yuriy - 28.8.2008, 13:56
Причина редактирования: Добавлен тэг expand