2013-09-11 5 views
1

У меня есть два потока внутри события в моем приложении C++ GUI (Visual Studio). Функция должна запускать некоторый код, но я хочу закончить поток, когда истечет указанное время. Нить, которую я сделал:End Thread^который не завершен

ThreadStart^ oThread = gcnew ThreadStart(this, &MyForm::ThreadMethod); 
Thread^ newThread = gcnew Thread(oThread); 
newThread->Start(); 

Как я могу закончить нить? Потому что то, что я пробовал, заканчивается исключением.

+0

Опасайтесь: Это очень опасно, особенно если этот поток выполняет любой неуправляемый код. – SLaks

+0

Выполняется управляемый код. Но знаете ли вы, как это сделать? – compu92

+0

Используйте 'Abort()', с осторожностью. – SLaks

ответ

3

Если ничего не мешает MyForm::ThreadMethod от отслеживания собственного времени, почему бы не интегрировать время в вашу резьбовую работу?

void ThreadMethod 
{ 
    Int64 watchdog = 1000L * 5L * 60L; // 5 minutes 
    System::Diagnostics::Stopwatch^ sw 
     = System::Diagnostics::Stopwatch::StartNew(); 

    while (sw->ElapsedMilliseconds < watchdog 
     && otherCondition) 
    { 
     // do your work here 
    } 
} 
+0

Может ли кто-нибудь сказать мне, как я могу остановить поток из другого потока, когда у меня есть три потока в моей программе? – compu92

+0

Вы всегда можете сделать 'otherCondition' переменную флага, которую другой поток может установить на' false'. – user7116

+0

Теперь я запускаю thwo threads под кнопкой события, для каждого потока у меня есть метод потока, как это: 'this-> Invoke (gcnew MethodInvoker (this, & MyForm :: nameMethodToExecute));'. Один поток имеет таймер, а другой поток - исполняемый код. Когда истек таймер, я хочу закрыть другой поток. Как я могу это сделать, потому что 'thread-> Abort()' не правильный путь и дает исключение. – compu92

Смежные вопросы