Название: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 04, 2017, 13:58
Добрый день! ОС Windows XP SP3. при работе программы зависает через некоторое время бездействия. Как я понимаю это связанно со ждущим режимом и т.п. Возможности нет поменять настройки ждущего режима, админа не поймаешь нашего. Может есть какое то решение. По коду там есть поток принятие данных с Com порта, код выложу вечером. Может будут какие то идеи?
Название: Re: Зависает программа через некоторое врямя
Отправлено: __Heaven__ от Декабрь 04, 2017, 14:33
https://movemouse.codeplex.com/
Название: Re: Зависает программа через некоторое врямя
Отправлено: __Heaven__ от Декабрь 04, 2017, 14:35
Это больше в качестве шутки, но ждущий режим эта программа уберёт...
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 04, 2017, 14:39
Нууу,... спасибо конечно, но есть какое то программное решение ?:
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 04, 2017, 14:50
Тем более не помогает))))
Название: Re: Зависает программа через некоторое врямя
Отправлено: __Heaven__ от Декабрь 04, 2017, 14:55
Кажется, программно только так: https://msdn.microsoft.com/en-us/library/aa373208(VS.85).aspx
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 04, 2017, 15:34
Я правильно поняд, подключить Windows.h, и написать в начале SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED); а в конце SetThreadExecutionState(ES_CONTINUOUS); ???
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 04, 2017, 22:57
Код вот : mainwindow.cpp #include "mainwindow.h" #include <QMessageBox> #include <QString> #include <QDesktopWidget> #include <QScreen> #include <QMetaEnum> //#include <unistd.h> #include <errno.h> #include "ui_mainwindow.h" #include <QPixmap> #include "dialog_settings.h" #include "packet.h" #include <qdebug.h> #include "QPalette"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { QPixmap myPixmap_on( "C:/if_Circle_Green_34211.png" ); QPixmap myPixmap_of( "C:/if_Circle_Grey_34212.png" ); QPixmap myPixmap_red( "C:/if_Circle_Red_34214.png" );
ui->setupUi(this);
info = new Dialog_Settings(this);//Создаем окно с настройками Com порта, info->setVisible(false);// но не отображаем.
ui->lcdNumber_3->display("00:00"); ui->lcdNumber_4->display("00:00");
ui->label_4->setPixmap(myPixmap_red); ui->label_3->setPixmap(myPixmap_of);
ui->spinBox->setMaximum(250); ui->spinBox_2->setMaximum(500);
connect(ui->action_Com,SIGNAL(triggered(bool)),this,SLOT(settings_menu())); connect(ui->action_3,SIGNAL(triggered(bool)),this,SLOT(close()));
connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(nasos_on())); connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(nasos_of()));
connect(ui->pushButton_5,SIGNAL(clicked(bool)),this,SLOT(on_Button_clicked())); connect(this,SIGNAL(on()),this,SLOT(vizvat_taimer())); connect(this,SIGNAL(off()),this,SLOT(taimer_stop()));
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(disp_lcd_time())); connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(disp_lcd_temp())); connect(info, SIGNAL(duble_send_signal(QByteArray)), this, SLOT(save_str(QByteArray))); connect(this,SIGNAL(sendArray(QByteArray)),info,SIGNAL(writeData(QByteArray)));
connect(this,SIGNAL(pomp_off(packet_big)),this,SLOT(put_in_array(packet_big))); connect(this,SIGNAL(pomp_on(packet_big)),this,SLOT(put_in_array(packet_big)));
}
MainWindow::~MainWindow() { delete ui; qDebug("del"); } void MainWindow::nasos_on() { QPixmap myPixmap_on( "C:/if_Circle_Green_34211.png" ); QPixmap myPixmap_of( "C:/if_Circle_Grey_34212.png" ); ui->label_3->setPixmap(myPixmap_on); ui->label_4->setPixmap(myPixmap_of);
packet_one.on_of_pomp=1; packet_one.pask(); emit pomp_on(packet_one); qDebug("idx1"); }
void MainWindow::nasos_of() { QPixmap myPixmap_of( "C:/if_Circle_Grey_34212.png" ); QPixmap myPixmap_red( "C:/if_Circle_Red_34214.png" ); ui->label_4->setPixmap(myPixmap_red); ui->label_3->setPixmap(myPixmap_of);
packet_one.on_of_pomp=0; packet_one.pask(); emit pomp_off(packet_one); qDebug("idx2"); }
void MainWindow::settings_menu() { info->setVisible(true); }
void MainWindow::disp_lcd_time() { num_time=ui->spinBox_2->value(); ui->lcdNumber_4->display(QTime::fromMSecsSinceStartOfDay(num_time*60000).toString("hh:mm")); packet_one.timer_ex=num_time; packet_one.pask(); emit pomp_off(packet_one);
}
void MainWindow::disp_lcd_temp() { num_temp=ui->spinBox->value(); ui->lcdNumber->display(num_temp); packet_one.current_temp_reactor=num_temp; packet_one.pask(); emit pomp_off(packet_one);
}
void MainWindow::vizvat_taimer() { timer = new QTimer(this); updater = new QTimer(this); updater->setSingleShot(false); connect(updater,SIGNAL(timeout()), this, SLOT(disp_lcd_temp_timer())); timer->setSingleShot(true); // connect(timer, &QTimer::timeout, timer, &QObject::deleteLater); connect(timer, SIGNAL(timeout()), timer, SLOT(stop())); connect(timer, SIGNAL(timeout()), this, SLOT(nasos_on())); connect(timer, SIGNAL(timeout()), updater, SLOT(stop())); connect(timer, SIGNAL(timeout()), this, SLOT(end_timer())); //connect(timer, &QTimer::timeout, updater, &QObject::deleteLater); updater->start(1000); timer->start(num_time*60000); }
void MainWindow::disp_lcd_temp_timer() {
QString text = QTime::fromMSecsSinceStartOfDay(timer->interval() - timer->remainingTime()).toString("hh:mm");
if (((((timer->interval() - timer->remainingTime())/1000)) % 2) != 0) text[2] = ' '; ui->lcdNumber_3->display(text); }
void MainWindow::on_Button_clicked() { if(flag_but_on==0) { flag_but_on=1; qDebug("flag_but_on_1"); ui->pushButton_5->setText("СТОП"); emit on(); } else if(flag_but_on==1) { flag_but_on=0; qDebug("flag_but_off_2"); ui->pushButton_5->setText("ПУСК"); ui->lcdNumber_3->display("00:00"); QPalette Pal = ui->lcdNumber_3->palette(); Pal.setColor(QPalette::Normal, QPalette::WindowText, Qt::black); Pal.setColor(QPalette::Normal, QPalette::Window, Qt::black); ui->lcdNumber_3->setPalette(Pal); emit off(); } }
void MainWindow::taimer_stop() {
qDebug("stop"); //updater->stop(); // timer->stop(); updater->deleteLater(); timer->deleteLater();
}
void MainWindow::save_str(QByteArray data) { packet_big tmp; unsigned char* masstmp = (unsigned char* )&tmp; for(unsigned int i=0; i<sizeof(tmp); i++) { masstmp[i]=(unsigned char)data[i]; } if(!tmp.test_pask()) { packet_one=tmp; qDebug()<<" ONE byte: "<<packet_one.start_byte_one<<"\n"<<"TWO byte: " << packet_one.start_byte_two <<"\n"<<"TEMP byte: " << packet_one.temp_pomp<<"\n"<<"ON-OF byte: "<<packet_one.on_of_pomp<<"\n"<<"CRC8 byte: "<<packet_one.CRC8<<"\n"<<"Temp_curent: "<<packet_one.current_temp_reactor <<"\n"<<"Timer: "<<packet_one.timer_ex; } ui->lcdNumber_5->display(packet_one.temp_pomp); ui->lcdNumber_2->display(packet_one.ex_temp_reactor); if(packet_one.on_of_pomp==0) { QPixmap myPixmap_on( "C:/if_Circle_Green_34211.png" ); QPixmap myPixmap_of( "C:/if_Circle_Grey_34212.png" ); QPixmap myPixmap_red( "C:/if_Circle_Red_34214.png" ); ui->label_4->setPixmap(myPixmap_red); ui->label_3->setPixmap(myPixmap_of);
} else if(packet_one.on_of_pomp==1) { QPixmap myPixmap_on( "C:/if_Circle_Green_34211.png" ); QPixmap myPixmap_of( "C:/if_Circle_Grey_34212.png" ); ui->label_3->setPixmap(myPixmap_on); ui->label_4->setPixmap(myPixmap_of);
}
}
void MainWindow::put_in_array(packet_big data) {
QByteArray tmp; unsigned char* masstmp = (unsigned char* )&data; qDebug()<<" QQQQQQQQQQQQQQQQQQQQQ 333 "<<packet_one.on_of_pomp; for(unsigned int i=0; i<sizeof(data); i++) { tmp[i]=masstmp[i]; } emit sendArray(tmp); }
void MainWindow::end_timer(){ ui->lcdNumber_3->display(QTime::fromMSecsSinceStartOfDay(num_time*60000).toString("hh:mm")); QPalette Pal = ui->lcdNumber_3->palette(); Pal.setColor(QPalette::Normal, QPalette::WindowText, Qt::red); Pal.setColor(QPalette::Normal, QPalette::Window, Qt::black); ui->lcdNumber_3->setPalette(Pal);
}
dialog_settings.cpp #include "dialog_settings.h" #include "ui_dialog_settings.h" #include <QThread> #include <QString> #include <qdebug.h>
Dialog_Settings::Dialog_Settings(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog_Settings) { ui->setupUi(this);
connect(ui->BaudRateBox, SIGNAL(currentIndexChanged(int)),this, SLOT(checkCustomBaudRatePolicy(int))); ui->BaudRateBox->addItem(QLatin1String("9600"), QSerialPort::Baud9600); ui->BaudRateBox->addItem(QLatin1String("19200"), QSerialPort::Baud19200); ui->BaudRateBox->addItem(QLatin1String("38400"), QSerialPort::Baud38400); ui->BaudRateBox->addItem(QLatin1String("115200"), QSerialPort::Baud115200); ui->BaudRateBox->addItem(QLatin1String("Custom")); // fill data bits ui->DataBitsBox->addItem(QLatin1String("5"), QSerialPort::Data5); ui->DataBitsBox->addItem(QLatin1String("6"), QSerialPort::Data6); ui->DataBitsBox->addItem(QLatin1String("7"), QSerialPort::Data7); ui->DataBitsBox->addItem(QLatin1String("8"), QSerialPort::Data8); ui->DataBitsBox->setCurrentIndex(3); // fill parity ui->ParityBox->addItem(QLatin1String("None"), QSerialPort::NoParity); ui->ParityBox->addItem(QLatin1String("Even"), QSerialPort::EvenParity); ui->ParityBox->addItem(QLatin1String("Odd"), QSerialPort::OddParity); ui->ParityBox->addItem(QLatin1String("Mark"), QSerialPort::MarkParity); ui->ParityBox->addItem(QLatin1String("Space"), QSerialPort::SpaceParity); // fill stop bits ui->StopBitsBox->addItem(QLatin1String("1"), QSerialPort::OneStop); #ifdef Q_OS_WIN ui->StopBitsBox->addItem(QLatin1String("1.5"), QSerialPort::OneAndHalfStop); #endif ui->StopBitsBox->addItem(QLatin1String("2"), QSerialPort::TwoStop); // fill flow control ui->FlowControlBox->addItem(QLatin1String("None"), QSerialPort::NoFlowControl); ui->FlowControlBox->addItem(QLatin1String("RTS/CTS"), QSerialPort::HardwareControl); ui->FlowControlBox->addItem(QLatin1String("XON/XOFF"), QSerialPort::SoftwareControl); connect(ui->cBtnSend,SIGNAL(clicked()),this, SLOT(on_cEnterText_returnPressed()) );
QThread *thread_New = new QThread;//Создаем поток для порта платы Port *PortNew = new Port();//Создаем обьект по классу PortNew->moveToThread(thread_New);//помешаем класс в поток PortNew->thisPort.moveToThread(thread_New);//Помещаем сам порт в поток connect(thread_New, SIGNAL(started()), PortNew, SLOT(process_Port()));//Переназначения метода run connect(PortNew, SIGNAL(finished_Port()), thread_New, SLOT(quit()));//Переназначение метода выход connect(thread_New, SIGNAL(finished()), PortNew, SLOT(deleteLater()));//Удалить к чертям поток connect(PortNew, SIGNAL(finished_Port()), thread_New, SLOT(deleteLater()));//Удалить к чертям поток connect(this,SIGNAL(savesettings(QString,int,int,int,int,int)),PortNew,SLOT(Write_Settings_Port(QString,int,int,int,int,int)));//Слот - ввод настроек! connect(ui->BtnSave, SIGNAL(clicked()),PortNew,SLOT(ConnectPort())); connect(PortNew, SIGNAL(Send_Data(QByteArray)), this, SLOT(Print(QByteArray)));//Лог ошибок connect(this,SIGNAL(writeData(QByteArray)),PortNew,SLOT(WriteToPort(QByteArray)));//слот на отправку в порт из главного окна connect(PortNew, SIGNAL(Send_Data(QByteArray)), this, SIGNAL(duble_send_signal(QByteArray)));//перенаправляем сигнал ui->comboBox->clear(); foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { ui->comboBox->addItem(info.portName()); } thread_New->start(); }
Dialog_Settings::~Dialog_Settings() { delete ui; qDebug("dellit setting"); }
void Dialog_Settings ::on_BtnSave_clicked() { savesettings(ui->comboBox->currentText(), ui->BaudRateBox->currentText().toInt(),ui->DataBitsBox->currentText().toInt(), ui->ParityBox->currentText().toInt(), ui->StopBitsBox->currentText().toInt(), ui->FlowControlBox->currentText().toInt());
qDebug("save setting");
}
void Dialog_Settings::checkCustomBaudRatePolicy(int idx) { bool isCustomBaudRate = !ui->BaudRateBox->itemData(idx).isValid(); ui->BaudRateBox->setEditable(isCustomBaudRate); if (isCustomBaudRate) { ui->BaudRateBox->clearEditText(); } }
//+++++++++++++[Процедура ввода данных из строки]++++++++++++++++++++++++++++++++++++++++ void Dialog_Settings::on_cEnterText_returnPressed() { QByteArray data; // Текстовая переменная data = ui->cEnterText->text().toLocal8Bit(); // Присвоение "data" значения из EnterText //data = ui->cEnterText->text().toLocal8Bit().toHex() + '\r'; writeData(data); // Отправка данных в порт Print(data); // Вывод данных в консоль } //+++++++++++++[Процедура вывода данных в консоль]++++++++++++++++++++++++++++++++++++++++ void Dialog_Settings::Print(QByteArray data) {
ui->consol->textCursor().insertText(data+'\r'); // Вывод текста в консоль
ui->consol->moveCursor(QTextCursor::End);//Scroll }
mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include <QTimer> #include <QTime> #include "dialog_settings.h"
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow { Q_OBJECT
public: packet_big packet_one= {254, 232, 0, 0, 0, 0, 0, 0, 0}; explicit MainWindow(QWidget *parent = 0); ~MainWindow(); signals:
void on_off(int baudrate); void off();//включение таймера и всего по нажатию пуск void on();//отключение таймера и всего по нажатию пуск void sendArray(QByteArray data); void pomp_on(packet_big packet_one); void pomp_off(packet_big packet_one);
public slots: void nasos_on();//включить насос void nasos_of();//выключить насос void settings_menu();//окно настроек Com порта void disp_lcd_time();//выставление таймера void disp_lcd_temp(); void vizvat_taimer(); void disp_lcd_temp_timer(); void save_str(QByteArray data); void put_in_array(packet_big data); void end_timer();
private slots: void on_Button_clicked(); void taimer_stop();
private: Ui::MainWindow *ui; QTimer * timer; //Адресная переменная таймера QTimer * updater; Dialog_Settings *info; int num_time=0; int num_temp=0; bool flag_but_on=0; };
#endif // MAINWINDOW_H
dialog_settings.h #ifndef MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include <QTimer> #include <QTime> #include "dialog_settings.h"
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow { Q_OBJECT
public: packet_big packet_one= {254, 232, 0, 0, 0, 0, 0, 0, 0}; explicit MainWindow(QWidget *parent = 0); ~MainWindow(); signals:
void on_off(int baudrate); void off();//включение таймера и всего по нажатию пуск void on();//отключение таймера и всего по нажатию пуск void sendArray(QByteArray data); void pomp_on(packet_big packet_one); void pomp_off(packet_big packet_one);
public slots: void nasos_on();//включить насос void nasos_of();//выключить насос void settings_menu();//окно настроек Com порта void disp_lcd_time();//выставление таймера void disp_lcd_temp(); void vizvat_taimer(); void disp_lcd_temp_timer(); void save_str(QByteArray data); void put_in_array(packet_big data); void end_timer();
private slots: void on_Button_clicked(); void taimer_stop();
private: Ui::MainWindow *ui; QTimer * timer; //Адресная переменная таймера QTimer * updater; Dialog_Settings *info; int num_time=0; int num_temp=0; bool flag_but_on=0; };
#endif // MAINWINDOW_H
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 00:13
port.h #ifndef PORT_H #define PORT_H
#include <QObject> #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo>
struct Settings { QString name; qint32 baudRate; QSerialPort::DataBits dataBits; QSerialPort::Parity parity; QSerialPort::StopBits stopBits; QSerialPort::FlowControl flowControl; };
class Port : public QObject { Q_OBJECT
public:
explicit Port(QObject *parent = 0);
~Port();
QSerialPort thisPort;
Settings SettingsPort; QByteArray in_data;
signals:
void finished_Port(); //
void error_(QString err);
void outPort(QString data); void Send_Data(QByteArray data);
public slots:
void DisconnectPort();
void ConnectPort(void);
void Write_Settings_Port(QString name, int baudrate, int DataBits, int Parity, int StopBits, int FlowControl);
void process_Port();
void WriteToPort(QByteArray data);
void ReadInPort();
private slots:
void handleError(QSerialPort::SerialPortError error);//
public:
};
#endif // PORT_H
port.cpp #include "port.h" #include <qdebug.h> #include "dialog_settings.h"
Port::Port(QObject *parent) : QObject(parent) { }
Port::~Port() { qDebug("By in Thread!"); emit finished_Port(); }
void Port :: process_Port(){ qDebug("Hello World in Thread!222"); connect(&thisPort,SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError))); connect(&thisPort, SIGNAL(readyRead()),this,SLOT(ReadInPort())); }
void Port :: Write_Settings_Port(QString name, int baudrate,int DataBits, int Parity,int StopBits, int FlowControl){ SettingsPort.name = name; SettingsPort.baudRate = (QSerialPort::BaudRate) baudrate; SettingsPort.dataBits = (QSerialPort::DataBits) DataBits; SettingsPort.parity = (QSerialPort::Parity) Parity; SettingsPort.stopBits = (QSerialPort::StopBits) StopBits; SettingsPort.flowControl = (QSerialPort::FlowControl) FlowControl; }
void Port :: ConnectPort(void){// thisPort.setPortName(SettingsPort.name); if (thisPort.open(QIODevice::ReadWrite)) { if (thisPort.setBaudRate(SettingsPort.baudRate) && thisPort.setDataBits(SettingsPort.dataBits)//DataBits && thisPort.setParity(SettingsPort.parity) && thisPort.setStopBits(SettingsPort.stopBits) && thisPort.setFlowControl(SettingsPort.flowControl)) { if (thisPort.isOpen()){ error_((SettingsPort.name+ " >> Открыт!\r").toLocal8Bit()); } } else { thisPort.close(); error_(thisPort.errorString().toLocal8Bit()); } } else { thisPort.close(); error_(thisPort.errorString().toLocal8Bit()); } }
void Port::handleError(QSerialPort::SerialPortError error)// { if ( (thisPort.isOpen()) && (error == QSerialPort::ResourceError)) { error_(thisPort.errorString().toLocal8Bit()); DisconnectPort(); } }//
void Port::DisconnectPort(){ if(thisPort.isOpen()){ thisPort.close(); error_(SettingsPort.name.toLocal8Bit() + " >> Закрыт!\r"); } } //ot tuta kovuratji!!! void Port :: WriteToPort(QByteArray data){ if(thisPort.isOpen()){ thisPort.write(data); } } // void Port :: ReadInPort(){ if(thisPort.bytesAvailable()>0){ QByteArray tmp; in_data.append(thisPort.readAll()); if(in_data.size()>=sizeof(packet_big)){ for(size_t i=0;i<in_data.size();i++){ if(in_data[i]==(char)254){ if(in_data[i+1]==(char)232){ if(in_data.size()>=sizeof(packet_big)){ tmp=in_data.mid(i,sizeof(packet_big)); in_data.remove(0,i+(sizeof(packet_big))); i=0; emit Send_Data(tmp); } else{ in_data.remove(0,i-1); break; } } } } } } }
Сам пакет #ifndef PACKET_H #define PACKET_H struct packet_big //пакет PC { unsigned char start_byte_one;//в длинном пакете равен 254 unsigned char start_byte_two;//в длинном пакете равен 232 unsigned char temp_pomp;//температура охлаждения unsigned char on_of_pomp;//on-off насоса (1 или 0) unsigned char ex_temp_reactor;//текущая температура в реакторе unsigned char current_temp_reactor;//выставленная температура в реакторе unsigned char timer_ex;//таймер unsigned char tmp;//пока не трогаем unsigned char CRC8;//пока не трогаем void pask() { CRC8 = (start_byte_one + start_byte_two + temp_pomp + on_of_pomp + ex_temp_reactor + current_temp_reactor + timer_ex + tmp) / 10; } /*проверка упаковки*/ bool test_pask() { if (CRC8 == ((start_byte_one + start_byte_two + temp_pomp + on_of_pomp + ex_temp_reactor + current_temp_reactor + timer_ex + tmp)) / 10) return 0; //ОК return 1; // ошибка }
}; #endif // PACKET_H
Коротко: порт слушает com порт , передает в mainwindow , там отображает в самой программе. Так же и наоброт: mainwindow передает данные на порт, который отправляется в Com. Настройки порта вынесены отдельным классом dialog_settings, структура пакета описана. Порт в отдельном потоке. В mainwindow по команде можно включить таймер.Понимаю что код очень нагроможденный , писал как мог, не судите строго))
Название: Re: Зависает программа через некоторое врямя
Отправлено: qate от Декабрь 05, 2017, 08:28
а что значит "зависает" ? кнопки не нажимаются или данные не приходят из ком-порта ?
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 08:56
зависает только GUI , в консоле при зависании данные приходят и отправляются. Даже таймер срабатывает, просто зависает картинка и весь интерфейс становится неактивный.
Название: Re: Зависает программа через некоторое врямя
Отправлено: qate от Декабрь 05, 2017, 11:31
код не проверяет выходы за размеры массивов (прогони код анализатором, pvs-studio например) ставь логгирование в каждом входе и выходе обработчиков сигналов, выводи размеры запусти под отладчиком, как зависнет - жми паузу смотри монитор потребления памяти
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 11:40
Ни когда не пользовался я такими приблудами))) Да массив там формальность, да и причем тут массив, с принятием данных все ок, виснет само окно, причем после бездействия на компе, если сидеть работь за компом, прога нормально работает.
Название: Re: Зависает программа через некоторое врямя
Отправлено: qate от Декабрь 05, 2017, 13:01
если код с ошибками, то как он будет работать никому и неизвестно например в MainWindow::save_str делается какойто трэш - сишный код вперемежку с классами
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 13:16
Ну как мог, так и заполнил структуру массивом ) А почему бы и нет?)))
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 13:59
А нет, пакеты идут но он не читает почему то. Просто проблема в том что на работе я не могу поставить QT creator, а сам агрегат тут, а дома без него никуда....(
Название: Re: Зависает программа через некоторое врямя
Отправлено: qate от Декабрь 05, 2017, 14:35
Ну как мог, так и заполнил структуру массивом ) А почему бы и нет?)))
Потому, что надо, как минимум, читать документацию на класс QByteArray (MainWindow::put_in_array)
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 15:18
Если не сложно, поподробнее пожалуйста...)
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 15:32
Чую что что то не так с портом, а именно с потоком , закрытием открытия потока и т.д. Посмотрите пожалуйста...это чисто предположение....
Название: Re: Зависает программа через некоторое врямя
Отправлено: qate от Декабрь 05, 2017, 16:08
Если не сложно, поподробнее пожалуйста...)
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 16:24
Объясните самоучке пожалуйста, почему это плохо?
Название: Re: Зависает программа через некоторое врямя
Отправлено: qate от Декабрь 05, 2017, 16:45
Объясните самоучке пожалуйста, почему это плохо?
нет, я ошибся, думал о другом вот чем плохо не иметь исходник (минимальный проект) в нормальном виде, а не копипаста кроме как рекомендовать логгировать подробнее и этим найти затык, более не знаю что сказать
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 05, 2017, 17:56
Дома буду пробовать. Еще опишу симптомы: при запуске программы все идет хорошо, но с течением времени в диспетчере задач растет нагрузга на процессор, в всю сьедая.....может есть какие то мысли по поводу этого, просто дома такой проблемы не было, а как release принес на рабочий комп с XP так сраху проблемы(
Название: Re: Зависает программа через некоторое врямя
Отправлено: zhbr от Декабрь 06, 2017, 06:43
может изза этого? ... int num_time=0; ... timer->start(num_time*60000); ...
вобще по симптомам похоже, что поток гуи перегружен - постоянно что-то молотит и тем самым не успевает обрабатывать события
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 06, 2017, 09:43
А что не так в данных строках? Да похоже на это, но таймер включай или не включай, все равно со временем виснет. Если смотреть по диспетчеру , медленно но верно жрет процессор.
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 06, 2017, 09:44
ааа...умножаю на ноль) ща посмотрю....
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 06, 2017, 09:51
Ну timer->start(num_time*60000); выставляется если я кнопку нажму, а нажимается кнопка когда выставится время, т.е. int num_time будет равно другому числу. Я конечно поправлю ошибку, но не думаю что она из за этого. Мне что то грешится на поток.....
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 06, 2017, 09:52
Хотя не вижу проблемы, умножаю на ноль и получаю 0.....))))
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 10, 2017, 12:38
ТОварищи! Помогите , за деньги кто проконсультирует по данной проблеме??? Пишите пожалуйста на почту : leonoffmaxim@gmail.com
Название: Re: Зависает программа через некоторое врямя
Отправлено: Игорь от Декабрь 11, 2017, 09:43
ТОварищи! Помогите , за деньги кто проконсультирует по данной проблеме??? Пишите пожалуйста на почту : leonoffmaxim@gmail.com
Есть вариант такой (как совет): раз у тебя XP SP3, то скомпилировать Qt под VisualStudio 2010 (там есть удаленный отладчик https://www.microsoft.com/en-us/download/details.aspx?id=475). 1. Ставишь студию 2010 на ноут 2. Компилируешь qt 5.6 под студию 3. Собираешь дебуг версию проекта, запускаешь на компе с прибором 4. Цепляешься к рабочей сетке ноутом 5. Запускаешь на рабочем компе удаленную отладку 6. Цепляешься студией к своему процессу 7. Когда подвиснет гуй ловишь процесс на паузу, смотришь стек вызовов
Название: Re: Зависает программа через некоторое врямя
Отправлено: zhbr от Декабрь 11, 2017, 11:53
ТОварищи! Помогите , за деньги кто проконсультирует по данной проблеме??? Пишите пожалуйста на почту : leonoffmaxim@gmail.com
может сможешь сделать проект, отвязанный от девайса с воспроизводимым эффектом зависания гуи? без всяких денег ради спортивного интереса помог бы.
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 11, 2017, 16:37
Цитата: Ostapich от Декабрь 10, 2017, 12:38 ТОварищи! Помогите , за деньги кто проконсультирует по данной проблеме??? Пишите пожалуйста на почту : leonoffmaxim@gmail.com Есть вариант такой (как совет): раз у тебя XP SP3, то скомпилировать Qt под VisualStudio 2010 (там есть удаленный отладчик https://www.microsoft.com/en-us/download/details.aspx?id=475). 1. Ставишь студию 2010 на ноут 2. Компилируешь qt 5.6 под студию 3. Собираешь дебуг версию проекта, запускаешь на компе с прибором 4. Цепляешься к рабочей сетке ноутом 5. Запускаешь на рабочем компе удаленную отладку 6. Цепляешься студией к своему процессу 7. Когда подвиснет гуй ловишь процесс на паузу, смотришь стек вызовов Сложно че то для меня))
Название: Re: Зависает программа через некоторое врямя
Отправлено: Ostapich от Декабрь 11, 2017, 16:39
может сможешь сделать проект, отвязанный от девайса с воспроизводимым эффектом зависания гуи? без всяких денег ради спортивного интереса помог бы.
В том то и дело, без подключения к девайсу все ок работает. Там что то с портом. Пишите на почту если хотите помочь, буду благодарен.
|