none
Finalizar uma Thread RRS feed

  • Pergunta

  • Olá, estou desenvolvendo um aplicativo que no momento utiliza uma thread para verificar se a conexão 3g do windows mobile já esta conectada, ou se deu algum erro... enfim.

    Me deparei com o seguinte problema, até então eu estava finalizando a thread assim:

    DWORD dwExitCode;
    ::GetExitCodeThread(m_hConnectionCheckThread,&dwExitCode);
    if(dwExitCode == STILL_ACTIVE)
    	::TerminateThread(m_hConnectionCheckThread,0);
    while(dwExitCode == STILL_ACTIVE)
    	::GetExitCodeThread(m_hConnectionCheckThread,&dwExitCode);
    if(m_hConnectionCheckThread)
    	::CloseHandle(m_hConnectionCheckThread);
    

    Mas, parece que não está mais funcionando, ele entra no primeiro if, e pff nada mais acontece.

     

    Alguém saberia como finalizar a thread de outra forma?

    quarta-feira, 1 de setembro de 2010 13:27

Respostas


  • Olá Bruno,

    Parece que ocorreu um deadlock. :-(

    Uma outra sugestão para finalizar o thread:

    #include
    <windows.h>
    #include
    <stdio.h>

    volatile
    BOOL CanThreadContinue;

    DWORD WINAPI ThreadProc( LPVOID )
    {
      while(CanThreadContinue){ printf("."); Sleep(100); }
      return 0;
    }

    int
    main()
    {
      DWORD tid;
      CanThreadContinue = TRUE;
      HANDLE th = CreateThread( NULL, 0, ThreadProc, NULL, 0, &tid );

      Sleep(1000);

      CanThreadContinue = FALSE;
      DWORD exit_code = STILL_ACTIVE;

      while( exit_code == STILL_ACTIVE ) GetExitCodeThread( th, &exit_code );
     
      CloseHandle(th);
    }
    Fabio Galuppo
    • Marcado como Resposta Bruno Luiz K. _ quinta-feira, 2 de setembro de 2010 17:06
    quinta-feira, 2 de setembro de 2010 11:02

Todas as Respostas


  • Olá Bruno,

    Parece que ocorreu um deadlock. :-(

    Uma outra sugestão para finalizar o thread:

    #include
    <windows.h>
    #include
    <stdio.h>

    volatile
    BOOL CanThreadContinue;

    DWORD WINAPI ThreadProc( LPVOID )
    {
      while(CanThreadContinue){ printf("."); Sleep(100); }
      return 0;
    }

    int
    main()
    {
      DWORD tid;
      CanThreadContinue = TRUE;
      HANDLE th = CreateThread( NULL, 0, ThreadProc, NULL, 0, &tid );

      Sleep(1000);

      CanThreadContinue = FALSE;
      DWORD exit_code = STILL_ACTIVE;

      while( exit_code == STILL_ACTIVE ) GetExitCodeThread( th, &exit_code );
     
      CloseHandle(th);
    }
    Fabio Galuppo
    • Marcado como Resposta Bruno Luiz K. _ quinta-feira, 2 de setembro de 2010 17:06
    quinta-feira, 2 de setembro de 2010 11:02
  • Povo que estiver clicando aqui, vai um link para quem quiser entender melhor sobre threads...

     

    http://www.flounder.com/workerthreads.htm

    sexta-feira, 1 de outubro de 2010 11:57