Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Problem in closing the thread

Problem in closing the thread

Scheduled Pinned Locked Moved C / C++ / MFC
helpquestion
5 Posts 5 Posters 0 Views 1 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.
  • L Offline
    L Offline
    learningvisualc
    wrote on last edited by
    #1

    Hi all, I have made a application in which i have a list control. Suppose that list control has 5 items when i press a button a thread is started using AfxBeginThread. Inside that thread i have made a for loop. That for loop pick up items from list and do some processings say a,b,c. These processing use functions of some other classes to get their result. I have a made a second button, by clicking on that second button i stop my thread using ::TerminateThread(obj,NULL);. My problem is when i click on second button my thread doesn't stop say if it is doing processing b first it will finish doing b then c then it will stop. I tried using ::TerminateThread(obj->m_hThread, NULL); but it also creates problem after some time i.e if i start and stop my processing for 3 times it will not start the process third time. I don't know what to do? Can anybody help me in this? Thanks in advance

    R C L Y 4 Replies Last reply
    0
    • L learningvisualc

      Hi all, I have made a application in which i have a list control. Suppose that list control has 5 items when i press a button a thread is started using AfxBeginThread. Inside that thread i have made a for loop. That for loop pick up items from list and do some processings say a,b,c. These processing use functions of some other classes to get their result. I have a made a second button, by clicking on that second button i stop my thread using ::TerminateThread(obj,NULL);. My problem is when i click on second button my thread doesn't stop say if it is doing processing b first it will finish doing b then c then it will stop. I tried using ::TerminateThread(obj->m_hThread, NULL); but it also creates problem after some time i.e if i start and stop my processing for 3 times it will not start the process third time. I don't know what to do? Can anybody help me in this? Thanks in advance

      R Offline
      R Offline
      Rajesh R Subramanian
      wrote on last edited by
      #2

      1. Show us the relevant code. 2. Never use TerminateThread().

      It was ever thus, the Neophiles will always rush out and get 'The Latest Thing' at a high price and with all the inherent faults - Dalek Dave.

      1 Reply Last reply
      0
      • L learningvisualc

        Hi all, I have made a application in which i have a list control. Suppose that list control has 5 items when i press a button a thread is started using AfxBeginThread. Inside that thread i have made a for loop. That for loop pick up items from list and do some processings say a,b,c. These processing use functions of some other classes to get their result. I have a made a second button, by clicking on that second button i stop my thread using ::TerminateThread(obj,NULL);. My problem is when i click on second button my thread doesn't stop say if it is doing processing b first it will finish doing b then c then it will stop. I tried using ::TerminateThread(obj->m_hThread, NULL); but it also creates problem after some time i.e if i start and stop my processing for 3 times it will not start the process third time. I don't know what to do? Can anybody help me in this? Thanks in advance

        C Offline
        C Offline
        Cedric Moonen
        wrote on last edited by
        #3

        As Rajesh said, never never use the TerminateThread function, unless you perfectly know what you are doing. Here[^] is an excellent article about threads, a bit long but it is definitively something to read if you want to start using threads. Taken from the article: Three functions immediately present themselves for purposes of pausing or shutting down a thread: the SuspendThread and ResumeThread methods (and their underlying API calls, ::SuspendThread and ::ResumeThread) and ::TerminateThread. Assume, for all practical purposes, except in some very limited contexts, these functions do not exist. Using them will almost always get you in trouble.

        Cédric Moonen Software developer
        Charting control [v3.0] OpenGL game tutorial in C++

        1 Reply Last reply
        0
        • L learningvisualc

          Hi all, I have made a application in which i have a list control. Suppose that list control has 5 items when i press a button a thread is started using AfxBeginThread. Inside that thread i have made a for loop. That for loop pick up items from list and do some processings say a,b,c. These processing use functions of some other classes to get their result. I have a made a second button, by clicking on that second button i stop my thread using ::TerminateThread(obj,NULL);. My problem is when i click on second button my thread doesn't stop say if it is doing processing b first it will finish doing b then c then it will stop. I tried using ::TerminateThread(obj->m_hThread, NULL); but it also creates problem after some time i.e if i start and stop my processing for 3 times it will not start the process third time. I don't know what to do? Can anybody help me in this? Thanks in advance

          L Offline
          L Offline
          Lost User
          wrote on last edited by
          #4

          The better way would be to set a stop-variable and check its value regularly during the thread execution. When it's set to 1, the thread is in control of what to do to terminate. This way, the thread has a chance to clean up memory and terminate properly. As for the direct problem of why TerminateThread won't work, does your handle have the access rights to terminate it?

          1 Reply Last reply
          0
          • L learningvisualc

            Hi all, I have made a application in which i have a list control. Suppose that list control has 5 items when i press a button a thread is started using AfxBeginThread. Inside that thread i have made a for loop. That for loop pick up items from list and do some processings say a,b,c. These processing use functions of some other classes to get their result. I have a made a second button, by clicking on that second button i stop my thread using ::TerminateThread(obj,NULL);. My problem is when i click on second button my thread doesn't stop say if it is doing processing b first it will finish doing b then c then it will stop. I tried using ::TerminateThread(obj->m_hThread, NULL); but it also creates problem after some time i.e if i start and stop my processing for 3 times it will not start the process third time. I don't know what to do? Can anybody help me in this? Thanks in advance

            Y Offline
            Y Offline
            yu jian
            wrote on last edited by
            #5

            donot call the method TerminateThread use the global memeber variable . BOOL isRunning check the variable isRunning in the loop. if FALSE exit the thread.

            1 Reply Last reply
            0
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            • Login

            • Don't have an account? Register

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • World
            • Users
            • Groups