Russian Qt Forum
Апрель 23, 2024, 13:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 2 [3] 4 5 ... 65
31  Qt / Установка, сборка, отладка, тестирование / Re: QtCreator & Perf : Март 19, 2021, 20:03
запустить perf от рута - не вариант ?


QtCreator  из под рута , в нем запускал анализатор производительности...
Эффект такой же. Жалобы на то что версия ядра линуха не соответствует версии perf

Код:
Perf 5.4.94
Linux 5.4.0-67
32  Компиляторы и платформы / Linux / Перенесено: QtCreator & Perf : Март 18, 2021, 19:24
Тема перенесена в Установка, сборка, отладка, тестирование.

http://www.prog.org.ru/topic_32987_0.html
33  Qt / Установка, сборка, отладка, тестирование / QtCreator & Perf : Март 18, 2021, 17:06
Никак не могу запустить Perf для QtCreayor В замешательстве

Операционная система Linux(XUbuntu  18.04) Ядро 5.4.0-67, Qt Creator 4.11.0

Савил Perf так:
Код:
sudo apt install linux-tools-common 
sudo linux-tools-generic linux-tools-`uname -r`
Итог:
Версия Perf
Код:
perv -v
perf version 5.4.94

Но...
Запускаю анализатор производительности - ругается на версию ядра якобы, "типа старая"
Хотя в окне вывода приложений пишет типа надо запускать из под суперпользователя

Ладно
Попробовал вот это
https://superuser.com/questions/980632/run-perf-without-root-rights?newreg=2f81b6d2ba2a4143af62fa81c188aa9a
Ну или набрал две команды как описанно в статье
Код:
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'
sudo sysctl -w kernel.perf_event_paranoid=1

Помогло, но...
Код:
WARNING: Kernel address maps (/proc/{kallsyms,modules}) are restricted,
check /proc/sys/kernel/kptr_restrict and /proc/sys/kernel/perf_event_paranoid.

Samples in kernel functions may not be resolved if a suitable vmlinux
file is not found in the buildid cache or in the vmlinux path.

Samples in kernel modules won't be resolved at all.

If some relocation was applied (e.g. kexec) symbols may be misresolved
even with a suitable vmlinux or kallsyms file.

Couldn't record kernel reference relocation symbol
Symbol resolution may be skewed if relocation was used (e.g. kexec).
Check /proc/kallsyms permission or run as root.
QHostAddress("127.0.0.1")
[ perf record: Woken up 27 times to write data ]
[ perf record: Captured and wrote 0,000 MB - ]

Кто сталкивался с этим, подскажите что делать Непонимающий
Спасибо!!!
34  Qt / Многопоточное программирование, процессы / IPC (AF_UNIX Socket) : Декабрь 13, 2019, 17:15
Пытаюсь  реализовать обмен между процессами с помощью сокетов(AF_UNIX).
При тестировании через некоторое количество времени на стороне сервера происходит падение.
В syslog выводится сообщение:

Код
C++ (Qt)
Process 8949 (qt_daemon) of user 1000 dumped core.#012#012Stack trace of thread
8950:#12#0 0x00007f13eabde905 __GI__IO_link_in (lib.so.6)#012#1 0x00007f13eabdd132
_IO_new_fileinit internal (lib.so.6)#012#2 0x00007f13eabcf653 _IO_new_fdopen (lib.so.6)
#012#3   0x00007f13eabcc2f9 __GI_perror  (lib.so.6)#012#4 0x00005ebe88bf1ab n/a
(path to ELF)#012#6 0x0004000300000000 n/a (n/a)
 

Не могу понять из-за происходит падение на стороне сервера.
Вроде с сокета вычитываю все норм.
Подскажите в каком направлении искать ошибку

Код Сервера и Клиента привел ниже:

Код:
Код Клиента

Код
C++ (Qt)
include "thr_client_daemon.h"
 
//auto connect_ = connect;
 
#include <QDebug>
ThrClientDaemon::ThrClientDaemon(QObject * parent)
   :   QThread(parent)
{
   flag_state = active;
}
 
ThrClientDaemon::~ThrClientDaemon()
{
}
 
void ThrClientDaemon::run()
{
   struct timeval tv;
 
   struct sockaddr_un address;
   address.sun_family = AF_UNIX;
   char str_servaddr[] = "/home/user/server_socket";
 
   strcpy(address.sun_path, str_servaddr);
 
   uint len = sizeof (struct sockaddr_un);
   int sockfd = 0;
   int res_connect = -1;
   int cnt_attempt_err = 0;
 
   ssize_t res_wr = 0;
 
   while(get_flag_state()){
 
       sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
       res_connect = ::connect(sockfd, reinterpret_cast<const struct sockaddr *>(&address), len);
 
       emit oops_client("TRY TO CONNECT...");
 
       if(res_connect != -1){
 
           emit oops_client("Connection Success");
 
           SendMsg304T msg[3];
           {
               memset(&msg, 0, sizeof (SendMsg304T));
               msg[0].data.fpga_trg->frame_xy[0] = 1;
               msg[0].data.fpga_trg->frame_xy[1] = 2;
               msg[1].data.fpga_trg->frame_xy[0] = 3;
               msg[1].data.fpga_trg->frame_xy[1] = 4;
               msg[2].data.fpga_trg->frame_xy[0] = 5;
               msg[2].data.fpga_trg->frame_xy[1] = 6;
           }
 
           while (get_flag_state()) {
 
               tv.tv_sec = 0;
               tv.tv_usec =  1000;
               select(0, nullptr, nullptr, nullptr, &tv);
 
               if((res_wr = write_all(sockfd, reinterpret_cast<char*>(msg), 3 * sizeof (SendMsg304T))) > 0){
 
               }
               else{
                   qDebug() << "write_err: !ERR! " << res_wr;
 
                   if(cnt_attempt_err == 3){
 
                       emit oops_client("LET TRY TO CONNECT");
                       cnt_attempt_err = 0;
                       close(sockfd);
                       break;
 
                   }
                   else{
                       cnt_attempt_err++;
                       emit oops_client(QString("Client error[was attempts]: %1").arg(cnt_attempt_err));
                   }
               }
 
           }//while
       }
       else{
 
           emit oops_client("LET TRY TO CONNECT");
           close(sockfd);
 
           tv.tv_sec = 0;
           tv.tv_usec =  1 * 1000000;
           select(0, nullptr, nullptr, nullptr, &tv);
       }
 
   }//while
 
   close(sockfd);
   emit fin();
}
 

Код:
Код сервера

Код
C++ (Qt)
#include "server_socket.h"
 
long bytes_available(int sockfd)
{
   long int avail = 0;
   size_t bytes = 0;
 
   if(ioctl(sockfd, FIONREAD, reinterpret_cast<char*>(&bytes)) >= 0)
       avail = static_cast<long int>(*reinterpret_cast<size_t*>(&bytes));
 
   return avail;
}
 
ssize_t read_all(int sockfd, char *buf, size_t len)
{
   size_t length = len;
   ssize_t ret = 0;
   ssize_t res = 0;
 
   while (length != 0 && (ret = read(sockfd, buf, length)) != 0){
       if(ret == -1){
           perror("read");
           return 0;
       }
       length -= static_cast<size_t>(ret);
       buf += ret;
       res += ret;
   }
   return res;
}
 
int create_server_socket()
{
   int server_sockfd, server_len;
   struct sockaddr_un server_address;
   unlink("/home/user/server_socket");
 
   server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
   server_address.sun_family = AF_UNIX;
   strcpy(server_address.sun_path,"/home/user/server_socket");
   server_len = sizeof(server_address);
 
   fcntl(server_sockfd, F_SETFL, O_NONBLOCK); //set non block socket
   bind(server_sockfd, reinterpret_cast<struct sockaddr*>(&server_address), static_cast<socklen_t>(server_len));
   listen(server_sockfd, 5);
 
   return server_sockfd;
}
 
int wait_client_connection(int *server_sockfd, int waittime)
{    
   int client_sockfd, client_len;    
   struct sockaddr_un client_address;
 
   client_sockfd = client_len = 0;
 
   int epfd;
   epfd = epoll_create1(0);
   if(epfd < 0)    return -1;
 
   struct epoll_event event1;
   event1.data.fd = *server_sockfd;
   event1.events = EPOLLIN | EPOLLET;
 
   if(epoll_ctl(epfd, EPOLL_CTL_ADD, *server_sockfd, &event1))  return -1;
 
 
   struct epoll_event event[64];
   int nr_events = 0; //int ret = 0;
   do{
 
#ifdef DEBUG_TEXT_SYSLOG        
       printf("waiting connection during 1 sec\n");
#endif    
 
       nr_events = epoll_wait(epfd, event, 64, waittime); //ret = poll(&fds_server, 1, waittime); //1*1000
 
       if(nr_events < 0){
 
           return -1;
       }
 
       if(nr_events > 0){  
 
           int i = 0;
           for(i = 0; i < nr_events; i++){
 
               if(event[i].events & EPOLLIN){
 
                   client_len = sizeof(struct sockaddr_un);                    
                   client_sockfd = ::accept(*server_sockfd,
                                            reinterpret_cast<struct sockaddr*>(&client_address),
                                            reinterpret_cast<socklen_t*>(&client_len)
                                            );
 
                   fcntl(client_sockfd, F_SETFL, O_NONBLOCK); //set non block socket    
                   printf("accept");
               }
 
           }
 
           return client_sockfd;
 
       }
   }
   while(1);
 
}
 
void* server_working(void * arg)
{  
   struct arg_serv *a_serv;
   a_serv = reinterpret_cast<struct arg_serv *>(arg);
   int client_sockfd = a_serv->client_sockfd;
 
   int epfd;
   epfd = epoll_create1(0);
   if(epfd < 0)    return reinterpret_cast<void*>(a_serv);
 
   struct epoll_event event1;
   event1.data.fd = client_sockfd;
   event1.events = EPOLLIN | EPOLLET | EPOLLHUP | EPOLLRDHUP;
 
   epoll_ctl(epfd, EPOLL_CTL_ADD, client_sockfd, &event1);
 
   SendMsg304T/*MSG_304_T*/ indata[MAX_ARRAY_MSG_304_T];
   memset(indata, 0, MAX_ARRAY_MSG_304_T * sizeof (SendMsg304T/*MSG_304_T*/));
 
   int cnt_attempt_err = 0;
   int cnt_attempt_wait = 0;        
 
   struct epoll_event event[64];
   while(1){
 
       int nr_events = epoll_wait(epfd, event, 64, -1); //10 millsecond
 
       if(nr_events > 0){
 
           int i = 0;
           for(i = 0; i < nr_events; i++){
 
               if(event[i].events & EPOLLIN){
 
                   //
                   //read available bytes in socket
                   long int avail = bytes_available(client_sockfd);
                   printf("avail bytes in socket = %ld\n", avail);
 
                   if(avail > 0){
 
                       //
                       //try read data
 
                       long int rd = 0;
                       if((rd = read_all(client_sockfd, reinterpret_cast<char*>(indata), static_cast<size_t>(avail))) > 0
 
                               /*(rd = recv(client_sockfd, reinterpret_cast<char*>(indata), static_cast<size_t>(avail),   MSG_WAITALL))> 0*/
                               /*read(client_sockfd, indata, СЃ) > 0*/){
 
                           printf("was red = %ld\n", rd);
                       }
                   }
                   else{
 
                       if(cnt_attempt_err == 3){
 
                           cnt_attempt_err = 0;
 
                           //escape of while(1)
                           pthread_mutex_lock(&a_serv->mutex);
                           a_serv->work = false;
                           pthread_mutex_unlock(&a_serv->mutex);
 
                           a_serv->err = -1;
                           close(client_sockfd);
 
                           return reinterpret_cast<void*>(a_serv);
                       }
                       else{
                           cnt_attempt_err++;
#ifdef DEBUG_TEXT_SYSLOG                                
                           openlog("Skelet demona",LOG_PID|LOG_CONS,LOG_DAEMON);
                           syslog(LOG_INFO,"avail = %ld\n", avail);
                           closelog();
#endif
                       }
                   }
 
                   //read available bytes in socket
                   //
               }
 
               if(event[i].events & EPOLLHUP){
 
#ifdef DEBUG_TEXT_SYSLOG                    
                   openlog("Skelet demona",LOG_PID|LOG_CONS,LOG_DAEMON);
                   syslog(LOG_INFO,"!!!POLLHUP EVENT!!!\n");
                   closelog();
#endif                      
 
                   pthread_mutex_lock(&a_serv->mutex);
                   a_serv->work = false;
                   pthread_mutex_unlock(&a_serv->mutex);
 
                   a_serv->err = -2;
                   close(client_sockfd);
 
                   return reinterpret_cast<void*>(a_serv);
               }
 
               if(event[i].events & EPOLLRDHUP){//else if(fds_client.revents & POLLHUP){
 
#ifdef DEBUG_TEXT_SYSLOG                    
                   openlog("Skelet demona",LOG_PID|LOG_CONS,LOG_DAEMON);
                   syslog(LOG_INFO,"!!!POLLRDHUP EVENT!!!\n");
                   closelog();
#endif                      
                   pthread_mutex_lock(&a_serv->mutex);
                   a_serv->work = false;
                   pthread_mutex_unlock(&a_serv->mutex);
 
                   a_serv->err = -3;
                   close(client_sockfd);
 
                   return reinterpret_cast<void*>(a_serv);
               }
 
               if(event[i].events & EPOLLERR){
 
#ifdef DEBUG_TEXT_SYSLOG                
                   openlog("Skelet demona",LOG_PID|LOG_CONS,LOG_DAEMON);
                   syslog(LOG_INFO,"!!!POLLERR EVENT!!!\n");
                   closelog();
#endif
                   pthread_mutex_lock(&a_serv->mutex);
                   a_serv->work = false;
                   pthread_mutex_unlock(&a_serv->mutex);
 
                   a_serv->err = -4;
                   close(client_sockfd);
 
                   return reinterpret_cast<void*>(a_serv);
               }
 
           }//end for
 
           //
           //
       }
       else if(nr_events == 0){//else if(ret == 0){
           printf("cnt_wait = %d",cnt_attempt_wait++);
       }
       else{
#ifdef DEBUG_TEXT_SYSLOG
           openlog("Skelet demona",LOG_PID|LOG_CONS,LOG_DAEMON);
           syslog(LOG_INFO,"nr_events = -1\n");
           closelog();
#endif
 
           pthread_mutex_lock(&a_serv->mutex);
           a_serv->work = false;
           pthread_mutex_unlock(&a_serv->mutex);
 
           a_serv->err = -5;
           close(client_sockfd);
 
           return reinterpret_cast<void*>(a_serv);
       }
 
   } //end while(1)
 
}
 
 

Код:
main
Код
C++ (Qt)
#include <QCoreApplication>
 
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/ioctl.h>
 
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <poll.h>
#include <sys/select.h>
#include <pthread.h>
 
#include "server_socket.h"
#include "global_varible.h"
#include "mil1553.h"
 
int main(int argc, char *argv[])
{
   int server_sockfd, client_sockfd;
   server_sockfd = create_server_socket();
 
   pthread_t thread_serv;
 
   struct arg_serv a_serv;
   memset(&a_serv, 0, sizeof(struct arg_serv));
 
   if((client_sockfd = wait_client_connection(&server_sockfd, 1 * 1000)) == -1)  return 1;
 
   a_serv.client_sockfd = client_sockfd;
   a_serv.mutex = PTHREAD_MUTEX_INITIALIZER;
   a_serv.work = true;
 
   if(!pthread_create(&thread_serv, nullptr, server_working, reinterpret_cast<void*>(&a_serv))){
       printf("create server thread");
   }
   else{
      printf("thread server error");
       return 1;
   }
 
   bool arg = true;
   while(arg){
 
       struct timeval tv;
       tv.tv_sec = 0;
       tv.tv_usec = 1000;
       select(0, nullptr, nullptr, nullptr, &tv);
 
       pthread_mutex_lock(&a_serv.mutex);
       arg = a_serv.work;
       pthread_mutex_unlock(&a_serv.mutex);
   }
 
   printf("Exit");
 
   struct arg_serv ret_arg_serv;
   void * ptr_ret = reinterpret_cast<void*>(&ret_arg_serv);
   pthread_join(thread_serv, &ptr_ret);
}
 
35  Компиляторы и платформы / Linux / Re: Копирование нитей в дочернем процессе(fork, pthreads) : Декабрь 27, 2018, 15:42
Спасибо Смеющийся уже проверил
36  Компиляторы и платформы / Linux / Копирование нитей в дочернем процессе(fork, pthreads) : Декабрь 27, 2018, 13:32
Скажите если перед вилкой созданы какие-либо потоки, то будут ли созданы их копии после вызова "вилки" fork
в дочернем процессе?

Код
C++ (Qt)
int main(void)
{
 
printf("MAIN\n");
 
pthread_t tid_1;
pthread_create(&tid_1, NULL, routine_1, NULL);
pthread_detach(tid_1);
 
pthread_t tid_2;
pthread_create(&tid_2, NULL, routine_2, NULL);
pthread_detach(tid_2);
 
 
pid_t pid = fork();
printf("child pid = %d\n", pid);
 
if(pid > 0){
 
//_____PARENT PROCESS____
while(!getchar());
 
}
else{
 
//_____CHILD PROCESS____
while(!getchar());
}
}
 

Спасибо!
37  Qt / Вопросы новичков / Работа с устройствами : Сентябрь 11, 2018, 13:56
Пытаюсь работать с платой.
Подключил либо с инклюдниками.
Но на этапе компиляции выдаёт ошибку
GUID_DEVCLASS_PCI429_3WIN необъявленный индетификатор.
Ошибка в стороке:
Код:
DEFINE_GUID (GUID_DEVCLASS_PCI429_3WIN,...)

И никак не могу подключить файл guids. h и initguid.h
38  Qt / Пользовательский интерфейс (GUI) / Re: Парковочные окна : Июль 10, 2018, 15:01
Цитата: assistant
void QWidget::adjustSize()

Спасибо.
А сигнал dockLocationChanged высылается когда парковочное окно
отцепляешь от виджета. Но тогда получается если, поменять размер
главного окна в этот момент, то парковочное окно уже нельзя будет
обратно прицепить?
39  Qt / Пользовательский интерфейс (GUI) / Парковочные окна : Июль 10, 2018, 14:24
Есть MainWidow ,на который добавляются парковочные окна.
Скажите как при удалении одного из окон подогнать MainWindow к размеру контента.
40  Компиляторы и платформы / Компиляторы / Re: Исполняемый релизный файл программы требует VCRUNTIME140D.dll : Май 29, 2018, 19:01
Понял, спасибо Улыбающийся
41  Компиляторы и платформы / Компиляторы / Исполняемый релизный файл программы требует VCRUNTIME140D.dll : Май 29, 2018, 13:03

Пишу в VS2017 с Qt. Поставил Qt5.6.0 для msvc2015, вроде не ругается компилит и линкует норм.
Из под студии работает программа работает нормально.
В проекте дополнительно использую библиотеки opencv3.3.0 и либы сгенеренные на MATLAB(Используется Runtime MATLAB)
Даже если взять исполняемый файл вместе с нужными либами и поместить на флешку и запустить с этого
же компа то все тоже норм пашет.

Но если запускать файл с машины на которой не установлена VS, то  все просит либы дополнительные в том числе и VCRUNTIME140D.dll(но это же дебажная либа)

Не пойму зачем и причем дебажный???

Сделал простой оконный проект(т.е одно окно) взял экзешник и нужные qt-либы все работает нормально.

Не пойму в чем причина???
42  Компиляторы и платформы / Linux / Re: Работа с сигналами : Май 08, 2018, 13:07
можно попробовать обновить qt (или системно или с сайта qt)
обработка сигналов должна идти сразу после установки обработчика

я ставлю обработчик после создания qapp, но он только для корректного выхода (по сигналам SIGINT и SIGTERM)

А код можно посмотреть Улыбающийся
43  Компиляторы и платформы / Linux / Re: Работа с сигналами : Май 08, 2018, 10:00
Код:
catch SIGUSR1 handler signal number = 10
 discribe signal:  User defined signal 1
catch SIGUSR1 handler signal number = 10
 discribe signal:  User defined signal 1






_____PARENT_PROCESS_____
_____CHILD_PROCESS_____
process_id =  16670
parentprocess_id =  16660
catch SIGUSR2 handler signal number = 12
 discribe signal:  User defined signal 2
setTextParentPID
setTextChildPID



catch signal handler signal number = 17
 discribe signal:  Child exited


Т.е я так понимаю работает нормально все.

А то у меня происходит обработка сигнала SIGCHLD, только после закрытия окна-процесса родителя.
44  Компиляторы и платформы / Linux / Re: Работа с сигналами : Май 08, 2018, 09:54
какая xubuntu и версия qt ?


Код:
Distributor ID:	Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
root@evgen-N100SP:/home/evgen# uname -r
4.4.0-112-generic

Linux evgen-N100SP 4.4.0-112-generic #135-Ubuntu SMP Fri Jan 19 11:48:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


Код:
Based on Qt 5.7.1 (GCC 4.9.1 20140922 (Red Hat 4.9.1-10), 64 bit)
45  Компиляторы и платформы / Linux / Re: Работа с сигналами : Май 07, 2018, 19:58
при запуске в консоли два окна и вывод:
catch SIGUSR1 handler signal number = 10
 discribe signal:  User defined signal 1
catch SIGUSR1 handler signal number = 10
 discribe signal:  User defined signal 1

какой дистр ?

xubuntu

А обработчик сигналов сообщения выдае при обработке SIGCHLD, когда процессы
убиваешь???
Страниц: 1 2 [3] 4 5 ... 65

Страница сгенерирована за 0.196 секунд. Запросов: 23.