Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to use Windows Message Loop and Qt Application Exec?
Forum Updated to NodeBB v4.3 + New Features

How to use Windows Message Loop and Qt Application Exec?

Scheduled Pinned Locked Moved General and Desktop
23 Posts 7 Posters 13.8k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M mrjj
    20 Sept 2018, 07:20

    @YJCN
    MFC is very old too :)

    Anyway i wonder with that line

    if(msg->message==275)

    means ? where did u get this magic number from ?

    Y Offline
    Y Offline
    YJCN
    wrote on 20 Sept 2018, 07:40 last edited by
    #12

    @mrjj
    This my CMD programm code

    int main (){       
            EdsCameraRef camera;
    	EdsUInt32 tv;
            init_camera(camera);
    	//start_liveview(camera);
    	//TakePicture(camera);
    	
    	take_photo(camera,1,1000);
    	//TakePhoto();
    	//dispose(camera);
    	cout << "before message" << endl;
    	MSG msg;
    	while (GetMessage(&msg, NULL, NULL, NULL))
    	{
    		cout << "in while" << " msg.message:"<<msg.message<<endl;
    		TranslateMessage(&msg);
    		cout << "TranslateMessage" << endl;
    		DispatchMessage(&msg); // Ends up calling objectEventFnc
    		cout << "DispatchMessage" << endl;
    		break;
    	}
    	cout << "after message" << endl;
            EdsCloseSession(camera);
    	cout << "EdsCloseSession(camera);";
    	EdsTerminateSDK();
    	system("pause");
            return 0;
    

    This is output
    0_1537429196448_3c672381-54c0-4382-832e-91e484ab0433-image.png

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mrjj
      Lifetime Qt Champion
      wrote on 20 Sept 2018, 08:11 last edited by mrjj
      #13

      HI
      ahh, so 275 is the ID for what SDK is doing.
      So you call
      init_camera(camera); in main window also ?
      (and take_photo(camera,1,1000);
      and camera is a member variable in main window so it doesn't run out of scope?

      but you never see 275 ? in natvieEvent?

      Y 1 Reply Last reply 20 Sept 2018, 09:18
      0
      • M mrjj
        20 Sept 2018, 08:11

        HI
        ahh, so 275 is the ID for what SDK is doing.
        So you call
        init_camera(camera); in main window also ?
        (and take_photo(camera,1,1000);
        and camera is a member variable in main window so it doesn't run out of scope?

        but you never see 275 ? in natvieEvent?

        Y Offline
        Y Offline
        YJCN
        wrote on 20 Sept 2018, 09:18 last edited by
        #14

        @mrjj Yes. I put the code(init_camera(camera) and take_photo(camera,1,1000) ) in Button's slot function, after taking picture, the programm can't enter callback function(handleObjectEvent) and there is no 275 in natvieEvent.

        M 1 Reply Last reply 20 Sept 2018, 09:30
        0
        • Y YJCN
          20 Sept 2018, 09:18

          @mrjj Yes. I put the code(init_camera(camera) and take_photo(camera,1,1000) ) in Button's slot function, after taking picture, the programm can't enter callback function(handleObjectEvent) and there is no 275 in natvieEvent.

          M Offline
          M Offline
          mrjj
          Lifetime Qt Champion
          wrote on 20 Sept 2018, 09:30 last edited by
          #15

          Hi
          and just to be 100% sure
          camera is NOT a local variable in Button's slot function, but in the .h file as a true member of
          main maindiw (in .h file) ?
          (im checking its not a death by scope issue)

          If unsure what i ask, please show full Button's slot function. :)

          Y 1 Reply Last reply 20 Sept 2018, 10:20
          0
          • M mrjj
            20 Sept 2018, 09:30

            Hi
            and just to be 100% sure
            camera is NOT a local variable in Button's slot function, but in the .h file as a true member of
            main maindiw (in .h file) ?
            (im checking its not a death by scope issue)

            If unsure what i ask, please show full Button's slot function. :)

            Y Offline
            Y Offline
            YJCN
            wrote on 20 Sept 2018, 10:20 last edited by
            #16

            @mrjj This is Button's slot function code

            void MainWindow::on_pushButton_2_clicked()
            {
                EdsCameraRef camera;
                init_camera(camera);
                //start_liveview(camera);
                //TakePicture(camera);
                take_photo(camera,1,1000);
                //TakePhoto();
                //dispose(camera);
                cout << "before message" << endl;
                MSG msg;
                while (::GetMessage(&msg, NULL, NULL, NULL))
                {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg); // Ends up calling objectEventFnc
                    break;
                }
                cout << "after message" << endl;
                EdsCloseSession(camera);
                cout << "EdsCloseSession(camera);";
                EdsTerminateSDK();
            }
            
            
            J 1 Reply Last reply 20 Sept 2018, 10:36
            0
            • Y YJCN
              20 Sept 2018, 10:20

              @mrjj This is Button's slot function code

              void MainWindow::on_pushButton_2_clicked()
              {
                  EdsCameraRef camera;
                  init_camera(camera);
                  //start_liveview(camera);
                  //TakePicture(camera);
                  take_photo(camera,1,1000);
                  //TakePhoto();
                  //dispose(camera);
                  cout << "before message" << endl;
                  MSG msg;
                  while (::GetMessage(&msg, NULL, NULL, NULL))
                  {
                      TranslateMessage(&msg);
                      DispatchMessage(&msg); // Ends up calling objectEventFnc
                      break;
                  }
                  cout << "after message" << endl;
                  EdsCloseSession(camera);
                  cout << "EdsCloseSession(camera);";
                  EdsTerminateSDK();
              }
              
              
              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 20 Sept 2018, 10:36 last edited by jsulm
              #17

              @YJCN said in How to use Windows Message Loop and Qt Application Exec?:

              while (::GetMessage(&msg, NULL, NULL, NULL))
              {
              TranslateMessage(&msg);
              DispatchMessage(&msg); // Ends up calling objectEventFnc
              break;
              }

              You execute this loop only once (because of the break).
              Shouldn't you call break after you got the message you need?

              @mrjj camera is local :-) but I don't thin this is the issue here.

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              M J 2 Replies Last reply 20 Sept 2018, 10:59
              4
              • J jsulm
                20 Sept 2018, 10:36

                @YJCN said in How to use Windows Message Loop and Qt Application Exec?:

                while (::GetMessage(&msg, NULL, NULL, NULL))
                {
                TranslateMessage(&msg);
                DispatchMessage(&msg); // Ends up calling objectEventFnc
                break;
                }

                You execute this loop only once (because of the break).
                Shouldn't you call break after you got the message you need?

                @mrjj camera is local :-) but I don't thin this is the issue here.

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 20 Sept 2018, 10:59 last edited by
                #18

                @jsulm
                I agree, it should not run out of scope if it works like we think :)
                But you are right, maybe it just get first MSG as then it breaks.

                1 Reply Last reply
                0
                • J jsulm
                  20 Sept 2018, 10:36

                  @YJCN said in How to use Windows Message Loop and Qt Application Exec?:

                  while (::GetMessage(&msg, NULL, NULL, NULL))
                  {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg); // Ends up calling objectEventFnc
                  break;
                  }

                  You execute this loop only once (because of the break).
                  Shouldn't you call break after you got the message you need?

                  @mrjj camera is local :-) but I don't thin this is the issue here.

                  J Offline
                  J Offline
                  JonB
                  wrote on 20 Sept 2018, 11:39 last edited by
                  #19

                  @YJCN

                  @jsulm said in How to use Windows Message Loop and Qt Application Exec?:

                  Shouldn't you call break after you got the message you need?

                  Indeed, the loop picks up the first message and that's it. What makes you think that message is the right/only one which needs to be processed this way? It could be any old message....

                  Y 1 Reply Last reply 21 Sept 2018, 01:41
                  1
                  • J JonB
                    20 Sept 2018, 11:39

                    @YJCN

                    @jsulm said in How to use Windows Message Loop and Qt Application Exec?:

                    Shouldn't you call break after you got the message you need?

                    Indeed, the loop picks up the first message and that's it. What makes you think that message is the right/only one which needs to be processed this way? It could be any old message....

                    Y Offline
                    Y Offline
                    YJCN
                    wrote on 21 Sept 2018, 01:41 last edited by
                    #20

                    @jsulm @JonB @mrjj Yes, you are right !!! I comment the "break" . It works well!! THANK YOU!☺☺☺☺☺☺☺☺☺☺

                    J 1 Reply Last reply 21 Sept 2018, 06:52
                    3
                    • Y YJCN
                      21 Sept 2018, 01:41

                      @jsulm @JonB @mrjj Yes, you are right !!! I comment the "break" . It works well!! THANK YOU!☺☺☺☺☺☺☺☺☺☺

                      J Offline
                      J Offline
                      JonB
                      wrote on 21 Sept 2018, 06:52 last edited by
                      #21

                      @YJCN
                      You have to do more than just comment out the break, if that's what you're saying. If that's all you do the ::GetMessage() loop will never exit, and your code will never return from on_pushButton_2_clicked(), e.g. you cannot press it again to take another photo. Presumably you need to find out whatever is the final message your camera issues on taking a photo and exit the loop once that has been received.

                      Y 1 Reply Last reply 22 Sept 2018, 07:17
                      2
                      • J JonB
                        21 Sept 2018, 06:52

                        @YJCN
                        You have to do more than just comment out the break, if that's what you're saying. If that's all you do the ::GetMessage() loop will never exit, and your code will never return from on_pushButton_2_clicked(), e.g. you cannot press it again to take another photo. Presumably you need to find out whatever is the final message your camera issues on taking a photo and exit the loop once that has been received.

                        Y Offline
                        Y Offline
                        YJCN
                        wrote on 22 Sept 2018, 07:17 last edited by
                        #22

                        @JonB Yes. I just use a five times for loop to solve it . ^_^

                        J 1 Reply Last reply 22 Sept 2018, 08:33
                        0
                        • Y YJCN
                          22 Sept 2018, 07:17

                          @JonB Yes. I just use a five times for loop to solve it . ^_^

                          J Offline
                          J Offline
                          JonB
                          wrote on 22 Sept 2018, 08:33 last edited by
                          #23

                          @YJCN
                          I don't know if your response is serious or amused. Doing it "five times" is very flaky. Isn't there a particular message number you get which you need to wait for to indicate it's now OK to leave the loop?

                          1 Reply Last reply
                          2

                          21/23

                          21 Sept 2018, 06:52

                          • Login

                          • Login or register to search.
                          21 out of 23
                          • First post
                            21/23
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved