информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
 С наступающим 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] thread умирает с переменным успехом 16.06.02 18:47  
Автор: Delimiter Статус: Незарегистрированный пользователь
<"чистая" ссылка>
ну вот такой поток......(смотри ниже)

когда коннект нормальный поток умирает правильна
но если я ухожу по catch ( CInternetException* pEx )
то тут и вижу полный бред ..... я вываливаюсь
но поток не закрывается (( и соответственно этот зомби
блокирует все что может ........(((

короче мож кто нидь подскажет где я тут лопухнулся???

 
void  Mystep(void *ch) 
{
	    int cntstr;
	    char before[100];
        CString strServerName; // имя сервера
        CString strObject;     // имя объекта 
        INTERNET_PORT nPort;   // номер порта для связи
        DWORD dwServiceType;   // тип сервиса
        CFile file2; 
        CFile file3;
		CFileException e;

		char prbuf[10];
		char *curptr;
		char debugstr[40];
		char *mytempbuf;
		char sysstr[50];
		int i,j,l;
		int ex,mycritfl=0;
		
        flaghttp=1;
		int cnt=0;
		mytempbuf=new char[500];
		for(;flagwait!=0;)
			Sleep(5);
		if(strlen((char *)my_url)>3)
		   m_url=CString((char *)my_url);		m_path=CString((char *)my_path);
CInternetSession session( _T( "Delimiter" ), PRE_CONFIG_INTERNET_ACCESS );

    // создаём переменную pServer класса CHttpConnection
    CHttpConnection* pServer = NULL;

    // создаём переменную pFile класса CHttpFile
    CHttpFile* pFile = NULL;


    try
    {
       

             if ( AfxParseURL( m_url, dwServiceType, strServerName, strObject, nPort ) == 0 )
        {
             ::PostMessage(mhWnd,STOP_HTTP,0,0);
            delete[] mytempbuf;
           _endthread();
        }
		m_mes = "";
		m_mes += "Server Name = "; 
		m_mes += (CString)strServerName; m_mes += "\r\n";
		m_mes += "Object Name = ";
		m_mes += (CString)strObject; m_mes += "\r\n";
		m_mes += "Port = ";
		itoa( nPort, temp, 10 );
		m_mes += (CString)&temp[0]; m_mes += "\r\n";

        ::PostMessage(mhWnd,DATE_UPDATE,0,0);
        // Устанавливаем подключение по HTTP протоклолу. 
        pServer = session.GetHttpConnection( strServerName, nPort );

	// посылаем запрос об объекте ( strObject )
        pFile = pServer->OpenRequest(
            CHttpConnection::HTTP_VERB_GET, strObject, NULL, 1, NULL, NULL,
            INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_DONT_CACHE
        );
        
        // Добавляем заголовок к HTTP запросу 
        pFile->AddRequestHeaders( _T( "Accept: */*\r\nUser-Agent: Delimiter\r\n" ) );

	// посылаем запрос
        pFile->SendRequest( );

        DWORD dwRet; // переменная для хранения кода состояния 
        pFile->QueryInfoStatusCode( dwRet ); // записываем код состояния в dwRet

        // вывод данных
        m_mes +=  "The HTTP GET returned a status code of ";
        itoa( dwRet, temp, 10 ); 
		m_mes +=  (CString)&temp[0]; m_mes += "\r\n"; 
				
	CString strHeader; // переменная для хранения полученного заголовока запроса
	pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strHeader); // записываем заголовок в strHeader

        // вывод данных
	m_mes += "Header = ";
	m_mes += strHeader; 
    ::PostMessage(mhWnd,DATE_UPDATE,0,0);

     
        // если код состояния не равен 200, то выходим из функции
	if( dwRet != 200 ) 
{ m_mes += "thread terminate!"; 
    ::PostMessage(mhWnd,STOP_HTTP,0,0);
      delete[] mytempbuf;
     session.Close( );
   _endthread();

	}
// ----------------------------------------------------------

        // проверка выбора файла для записи        	
	m_mes += "Starting download the file."; m_mes += "\r\n";

	if( m_path == "" ) 
	{ 
		m_mes += "Error! No file to save. Choese the file.";
		m_mes += "\r\n";
		//UpdateData( FALSE );
     
        session.Close( );
      ::PostMessage(mhWnd,STOP_HTTP,0,0);
        delete[] mytempbuf;
		 _endthread();

	}
	else 
	{
		m_mes += "File name to save : ";
		m_mes += m_path; m_mes += "\r\n";
        ::PostMessage(mhWnd,DATE_UPDATE,0,0);
		
	}
	
	
        file2.Open((LPCTSTR)m_path,
		CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);

	int allRead = 0; 
                     int nRead = pFile->Read( strBody, 1024 ); 
        allRead += nRead; 
        m_mes += "Loading ";
        itoa( nRead, temp, 10 );
	m_mes += (CString)&temp[0]; m_mes += " bytes"; m_mes += "\r\n";
    ::PostMessage(mhWnd,DATE_UPDATE,0,0);
	file2.Write( strBody, nRead ); 

        
        while ( nRead > 0 )
        {
            nRead = pFile->Read( strBody, 1024 );
		
			 if( nRead != 0 ) 
			 {
				m_mes += "Loading ";
				itoa( nRead, temp, 10 );
				m_mes += (CString)&temp[0]; m_mes += " bytes"; m_mes += "\r\n";

				 file2.Write( strBody, nRead );
				 allRead += nRead;
                 ::PostMessage(mhWnd,DATE_UPDATE,0,0);
						 }
			
        }

        
	m_mes += "\r\n";
	m_mes += "Total bytes = ";
	itoa( allRead, temp, 10 );
	m_mes += &temp[0]; m_mes += "\r\n";
    ::PostMessage(mhWnd,DATE_UPDATE,0,0);
		
	file2.Close();  

        pFile->Close(); // закрываем Internet файл
        pServer->Close(); // закрываем сервер

        m_mes += "Download is complete !!!"; m_mes += "\r\n";
        ::PostMessage(mhWnd,DATE_UPDATE,0,0);
		
    }

    catch ( CInternetException* pEx )
    {
        
        char szErr[1024];
        pEx->GetErrorMessage( szErr, 1024 );
        strcpy((char *)status,"Error: ( ");
        m_mes += "Error: ( ";
		itoa( int(pEx->m_dwError), temp ,10 );
		strcat((char *)status,temp);
		m_mes += (CString)&temp[0];
		m_mes += " ) ";
		strcat((char *)status," ) ");
        m_mes +=  (CString)&szErr[0]; m_mes += "\r\n";
        strcat((char *)status,&szErr[0]);
        ::PostMessage(mhWnd,DATE_UPDATE,0,0);
	
        pEx->Delete( ); // удаление переменной класса CInternetException 
        if ( pFile != NULL )
            delete pFile; // закрываем Internet файл
        if ( pServer != NULL )
            delete pServer; // закрываем сервер
        session.Close( ); // закрываем сессию
        flaghttp=0;
        delete[] mytempbuf;
        ::PostMessage(mhWnd,STOP_HTTP,0,0);
     
       _endthread();
     
    }
 
    if ( pFile != NULL )
        delete pFile; // закрываем Internet файл
    if ( pServer != NULL )
        delete pServer; // закрываем сервер
    session.Close( ); // закрываем сессию
   
//####################################
// вырезана обработка 
// .......................
//####################################

::PostMessage(mhWnd,STOP_HTTP,0,0);
	remove((LPCTSTR)m_path);
	delete[] mytempbuf;
	
	flaghttp=0;

  _endthread();

}

---
[C++] thread умирает с переменным успехом 17.06.02 00:54  
Автор: Duxx Статус: Незарегистрированный пользователь
<"чистая" ссылка>
у меня такая же ситуация с потоком возникала если я незакрою сокет, в этом случая зомби оставился висеть, такими обьектами MFC какими пользуешся ты я непользовался поэтому точно сказать немогу сказать в чем проблема.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach