我正在使用 VS2012,我想从正在运行的线程中设置线程优先级。目标是初始化具有最高优先级状态的所有线程。为此,我想获得一个HANDLE
线程。
我在访问与thread
对象对应的指针时遇到了一些问题。
这可能吗?
从调用主线程,指针是有效的,从 C++11 线程它被设置为CCCCCCCC
. 可以预见地取消引用一些无意义的内存位置会导致崩溃。
下面的代码是显示问题的简化版本。
#include "stdafx.h"
#include <Windows.h>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <iostream>
#include <atomic>
using namespace std;
class threadContainer
{
thread* mT;
condition_variable* con;
void lockMe()
{
mutex m;
unique_lock<std::mutex> lock(m);
con->wait(lock);//waits for host thread
cout << mT << endl;//CCCCCCCC
auto h = mT->native_handle();//causes a crash
con->wait(lock);//locks forever
}
public:
void run()
{
con = new condition_variable();
mT = new thread(&threadContainer::lockMe,*this);
cout << mT << endl; //00326420
con->notify_one();// Without this line everything locks as expected
mT->join();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
threadContainer mContainer;
mContainer.run();
return 0;
}