私は 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;
}