Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 14:56   #1
GeorgeBatyuchenko
Новичок
Джуниор
 
Регистрация: 18.12.2012
Сообщений: 2
Сообщение .Net потоки

Доброго времени суток!
Работаю в VS2010 C++ Express, имею проблему с завершением потока. Примечательно, что в методе, выполняющимся в новом потоке заведен бесконечный цикл. Насколько я понимаю для объекта типа System::Threading::Thread выполняются следующие правила:
1) Нельзя закончить поток в состоянии WaitSleepJoin, будет ThreadAbortExeption;
2) Из состояния WaitSleepJoin можно выйти вызвав метод Interrupt();
3) Если поток находится в состоянии WaitSleepJoin, то вызов Suspend ни к чему не приведет;
Header:
Код:
#pragma once
using namespace System::Threading;
#define  THREAD_TIMEOUT 200
ref class CamThread
{
public:
	CamThread(void);
	void start();
	void stop();
protected:
	void run();
private:
	Thread^ m_thread;
};
Source:

Код:
CamThread::CamThread(void){
	m_thread = gcnew Thread(gcnew System::Threading::ThreadStart(this,&CamThread::run));
}
void CamThread::start(){
	m_thread->Start();
}
void CamThread::stop(){
        if(m_thread->ThreadState == ThreadState::WaitSleepJoin){
                 m_thread->Interrupt()
        }
	m_thread->Abort();
        delete m_thread;
}
void CamThread::run(){
	while(1){
		// что то делаем
		Thread::Sleep(THREAD_TIMEOUT);
	}
}
Описанный класс, по задумке должен считывать кадры с камеры. А другие классы должны обращаться к нему за кадрами. Проблема в том что после вызова start() в конструкторе главной формы и вызова stop() в деструкторе, программа завершается, а процесс остается висеть в задачах. Исключений также не возникает. Я подозреваю, это из-за неправильного завершения потока camthread. Уже не однократно читал документацию на msdn но не могу понять в ем причина. Пожалуйста объясните в чем может быть подвох.
GeorgeBatyuchenko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net gammaray Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 22.11.2010 17:36