unordered_map<std::string,unordered_map<std::string, std::string> >* storing_vars;
スコープで宣言されたスコープにこの変数があります。
これはコンストラクターで宣言されます。
this->storing_vars = new unordered_map<std::string,unordered_map<std::string, std::string> >();
それを初期化するために。
次に、BackgroundWorkerによって関数を何度も呼び出します。
for(int i2 = 0; i2 < 30; i2++){
int index_pos_curr = i2;
//Start the Threads HERE
this->backgroundWorker2 = gcnew System::ComponentModel::BackgroundWorker;
this->backgroundWorker2->WorkerReportsProgress = true;
this->backgroundWorker2->WorkerSupportsCancellation = true;
//this->backgroundWorker2->FieldSetter(L"std::string",L"test","damnnit");
backgroundWorker2->DoWork += gcnew DoWorkEventHandler( this, &MainFacebook::backgroundWorker2_DoWork );
backgroundWorker2->RunWorkerCompleted += gcnew RunWorkerCompletedEventHandler( this, &MainFacebook::backgroundWorker2_RunWorkerCompleted );
backgroundWorker2->ProgressChanged += gcnew ProgressChangedEventHandler( this, &MainFacebook::backgroundWorker2_ProgressChanged );
backgroundWorker2->RunWorkerAsync(index_pos_curr);
Sleep(50); //THE PROBLEM IS HERE, IF I COMMENT THIS OUT it won't work, that's probably because there are a lot of functions trying to add values in the same variable (even though the indexes are differents in each call)
}
これが行われた後、DoWork関数を呼び出します
void backgroundWorker2_DoWork(Object^ sender, DoWorkEventArgs^ e ){
BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);
e->Result = SendThem( safe_cast<Int32>(e->Argument), worker, e );
}
int SendThem(int index){
stringstream st;
st << index;
//...
(*this->storing_vars)[st.str()]["index"] = "testing1";
(*this->storing_vars)[st.str()]["rs"] = "testing2";
return 0;
}
この行にコメントを追加したSleep(50)
ので、問題は、バックグラウンドのスレッドが同じ関数を呼び出すため、何度も呼び出されたときにデータを保存するのに問題があることだと思います。終了すると、「xhash.h」ファイルでエラーが発生します。これは、を使用してサニタイズされるエラーですSleep(50)
が、UIがフリーズし、50ミリ秒がすでに保存されていると想定しているため、使用できません。可変値ですが、低速のコンピューターで時間がかかる場合はどうなりますか?それは正しいアプローチではありません。
それを修正するにはどうすればよいですか?
SLEEPを使用せずにunordered_mapを更新できるようにしたい
前もって感謝します。