생성자 또는 정적 생성시 qtimer가 충돌 함

Petter Olofsson

그래서 마침내 나는 답을 찾지 못한 이상한 문제를 발견했습니다.

작은 GUI를 만들고 별도의 창에서 응용 프로그램을 시작한 다음 qtimer를 사용하여이 응용 프로그램의 상태를 폴링합니다.

    process_timer = new QTimer(this);
    connect(process_timer, SIGNAL(timeout()), this, SLOT(checkFlashProcess()));
    process_timer->start(100);

그래서 이것은 작동합니다. 그러나 매번 새 타이머를 생성하지 않기 때문에 GUI 생성자에 process_timer 생성을 배치했습니다.

Flasher::Flasher(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Flasher)
{
    ui->setupUi(this);
    process_timer = new QTimer(this);
}

이제 충돌과 출력이 발생합니다. QObject :: connect : Cannot connect (null) :: timeout () to Flasher :: checkFlashProcess ()

이것도 동일합니다.

Flasher::Flasher(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Flasher),
process_timer(new QTimer)
{...

QTimer * process_timer는 애플리케이션 헤더에 정의되어 있습니다.

또한 process_timer를 비 동적으로 정의하려고 시도했습니다.

    header.h:
        QTimer process_timer;
    code.cpp
    void Flasher::on_flashButton_clicked()
    {
    (...)
    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, process_pid );
    if(hProcess)
    {
        qDebug() << "Got handle for process!";
        connect(&process_timer, SIGNAL(timeout()), this, SLOT(checkFlashProcess()));
        process_timer.start(30);
    }

이것은 또한 충돌로 이어집니다.

콜백 :

 void Flasher::checkFlashProcess()
 {
        qDebug() << "Got handle for process!";
 }

그러나 이것은 왜? 타이머는 생성자에서 생성되지 않지만 생성자에서 객체를 생성하는 것은 문제가되지 않을까요? 그리고 왜 정적 버전이 충돌할까요? 이것이 같은 문제일까요?

Petter Olofsson

좋아, 이것은 qtimer와 관련이 없지만 메모리 문제인 것 같습니다. 나는 Windows에서 프로세스 핸들을 얻는 방법을 많이 찾고 있었고 대부분 유닉스에 대한 소스를 찾았습니다. 그런 다음 두 가지 사이에서 나는 일이 섞여서 메모리의 타이머 바로 전에 배치 된 것처럼 보이는 process_pid에 DWORD를 사용하여 끝났습니다. 따라서 openprocess를 호출하면 손상이 발생하고 충돌이 발생했습니다. 응용 프로그램을 시작한 후 타이머를 생성하면 타이머를 다시 복원하여 "수정"했습니다.

또 다른 교훈을 얻었으며 qProcess에서 OpenProcess까지 pid에 qint64를 사용하면 잘 작동합니다. 바라건대 다른 누군가가 비슷한 일을하려고 할 때 이것을 발견하고 번거 로움을 피할 수 있기를 바랍니다. 문제를 분리하기 위해 mcve를 만들어 주셔서 감사합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

생성자에서 '해시 충돌로 인해'컴파일 오류가 발생하는 Groovy 생성자

분류에서Dev

typescript 정의 생성자 또는 함수?

분류에서Dev

생성자 함수에서 수정 또는 상속이 가능합니까?

분류에서Dev

Debian 이미지가있는 포드가 생성되지만 컨테이너가 계속 충돌 함

분류에서Dev

Django 동적 모델 생성. 필드가 충돌합니다

분류에서Dev

tabbarcontroller와 탐색보기 컨트롤러 간의 관계를 생성하는 동안 Xcode가 충돌 함

분류에서Dev

Kotlin 생성자 충돌

분류에서Dev

충돌 생성 시도

분류에서Dev

함수 내부에 명시 적 생성자가있는 정적 객체 선언으로 인해 코드가 끊어지는 이유는 무엇입니까?

분류에서Dev

"세부 정보 창"또는 "미리보기 창"이 활성화 된 상태에서 Office 문서 (.docx, .xlsx)를 선택하면 Windows 탐색기가 충돌 함

분류에서Dev

"세부 정보 창"또는 "미리보기 창"이 활성화 된 상태에서 Office 문서 (.docx, .xlsx)를 선택하면 Windows 탐색기가 충돌 함

분류에서Dev

명시 적으로 정의 된 생성자가 없는데 왜 객체를 생성 할 수 있습니까?

분류에서Dev

Java는 new 연산자와 함께 생성자 (또는 객체)를 암시 적으로 사용합니까?

분류에서Dev

시스템 충돌시 clflush 또는 clflushopt 원자 적입니까?

분류에서Dev

가시성 변화와 함께 특성 충돌 해결

분류에서Dev

계정 생성시 추가 사용자 데이터를 생성하는 Firebase

분류에서Dev

사용자 정의 plist를 읽으면 충돌이 발생 함

분류에서Dev

std :: any를 사용하는 복사 생성자와 생성자 간의 충돌

분류에서Dev

객체 생성 또는 업데이트시 정적 함수 대 멤버 함수 사용

분류에서Dev

gnuplot 코드의 달러 기호가 epslatex와 충돌을 생성 함

분류에서Dev

std :: exception 발생시 Visual Studio 2013 IDE가 충돌 함

분류에서Dev

개체 생성과 충돌하는 WorldNode

분류에서Dev

비디오 재생시 Ubuntu 18.04 LTS의 Xorg가 자주 충돌 함

분류에서Dev

파일 생성시 타임 스탬프가 포함 된 로그 파일을 생성하는 WinSCP의 사용자 지정 명령

분류에서Dev

C ++ 11 : 기본 생성자 : 암시 적 또는 명시 적?

분류에서Dev

해시 충돌 가능성

분류에서Dev

성공적인 gradle 조립 후 Android 릴리스 APK가 충돌 함

분류에서Dev

열거 형에서 임의 유형을 생성하는 정적 함수로 인해 "선택적 값을 풀 때 예기치 않게 nil을 찾았습니다"오류와 함께 충돌이 발생합니다.

분류에서Dev

한 번만 실행되는 클래스에 정적 생성자가 포함되어야합니까?

Related 관련 기사

  1. 1

    생성자에서 '해시 충돌로 인해'컴파일 오류가 발생하는 Groovy 생성자

  2. 2

    typescript 정의 생성자 또는 함수?

  3. 3

    생성자 함수에서 수정 또는 상속이 가능합니까?

  4. 4

    Debian 이미지가있는 포드가 생성되지만 컨테이너가 계속 충돌 함

  5. 5

    Django 동적 모델 생성. 필드가 충돌합니다

  6. 6

    tabbarcontroller와 탐색보기 컨트롤러 간의 관계를 생성하는 동안 Xcode가 충돌 함

  7. 7

    Kotlin 생성자 충돌

  8. 8

    충돌 생성 시도

  9. 9

    함수 내부에 명시 적 생성자가있는 정적 객체 선언으로 인해 코드가 끊어지는 이유는 무엇입니까?

  10. 10

    "세부 정보 창"또는 "미리보기 창"이 활성화 된 상태에서 Office 문서 (.docx, .xlsx)를 선택하면 Windows 탐색기가 충돌 함

  11. 11

    "세부 정보 창"또는 "미리보기 창"이 활성화 된 상태에서 Office 문서 (.docx, .xlsx)를 선택하면 Windows 탐색기가 충돌 함

  12. 12

    명시 적으로 정의 된 생성자가 없는데 왜 객체를 생성 할 수 있습니까?

  13. 13

    Java는 new 연산자와 함께 생성자 (또는 객체)를 암시 적으로 사용합니까?

  14. 14

    시스템 충돌시 clflush 또는 clflushopt 원자 적입니까?

  15. 15

    가시성 변화와 함께 특성 충돌 해결

  16. 16

    계정 생성시 추가 사용자 데이터를 생성하는 Firebase

  17. 17

    사용자 정의 plist를 읽으면 충돌이 발생 함

  18. 18

    std :: any를 사용하는 복사 생성자와 생성자 간의 충돌

  19. 19

    객체 생성 또는 업데이트시 정적 함수 대 멤버 함수 사용

  20. 20

    gnuplot 코드의 달러 기호가 epslatex와 충돌을 생성 함

  21. 21

    std :: exception 발생시 Visual Studio 2013 IDE가 충돌 함

  22. 22

    개체 생성과 충돌하는 WorldNode

  23. 23

    비디오 재생시 Ubuntu 18.04 LTS의 Xorg가 자주 충돌 함

  24. 24

    파일 생성시 타임 스탬프가 포함 된 로그 파일을 생성하는 WinSCP의 사용자 지정 명령

  25. 25

    C ++ 11 : 기본 생성자 : 암시 적 또는 명시 적?

  26. 26

    해시 충돌 가능성

  27. 27

    성공적인 gradle 조립 후 Android 릴리스 APK가 충돌 함

  28. 28

    열거 형에서 임의 유형을 생성하는 정적 함수로 인해 "선택적 값을 풀 때 예기치 않게 nil을 찾았습니다"오류와 함께 충돌이 발생합니다.

  29. 29

    한 번만 실행되는 클래스에 정적 생성자가 포함되어야합니까?

뜨겁다태그

보관