none
Metro中如何强制结束ThreadPool中的线程 RRS feed

  • 问题

  • 我通过ThreadPool创建了一个线程,用来独立处理数据,但是找不到在UI线程中立即强制停止线程的方法,通过IAsyncAction::Cancel()和IAsyncAction::Close()也不能立即终止线程,目前的处理方法只能在循环中设置标记变量。

    我创建线程时: 

    m_itemHandler = ref new WorkItemHandler([this](IAsyncAction^ workItem)  { 
        while (!m_bEnd)
        {
            ProcessData();
        }
    });
    m_itemAsyncAction = Windows::System::Thread::ThreadPool::RunAsync(m_itemHandler, WorkItemPriority::High);

    退出的时候只能通过设置m_bEnd标记变量来等待退出。 但是这种方式有缺陷, 例如: 现在ProcessData()函数最小执行时间要50ms,不能再分割了,那么在设置m_bEnd=TURE后,可以通过WaitForSingleEvent()等待线程安全退出,最坏情况要等待50ms线程才可能真正的退出。  这个在我现在的应用中是不可接受的 (我的应用中需要立刻停止, ProcessData()中的资源可以处理保证不会有内存泄露)。

    Metro中有没有类似Win32上的ExitThread()的函数,强制立刻终止线程的?


    2013年3月12日 11:37

答案