私はWindowsでのスレッドに関する小さな質問があります。私Mthread
クラスを作成しているWindows上のスレッド
main.cppに
int main(int ac, char **av)
{
std::vector<Mthread *> mythread;
std::list<std::string> stack;
DWORD id = 0;
stack.push_back("Maison");
stack.push_back("Femmes");
stack.push_back("Fetes");
stack.push_back("Voitures");
stack.push_back("Nounours");
while (id != 5)
{
mythread.push_back(new Mthread());
mythread[mythread.size() - 1]->initThread(&stack, id);
id++;
}
id = 0;
while (id != 5)
{
WaitForInputIdle(mythread[id]->getThread(), INFINITE);
id++;
}
return (1);
}
とMthread.cpp:私は、次のコードを持っています。
Mthread::Mthread() {}
Mthread::~Mthread() {}
HANDLE Mthread::getThread(void) const
{
return (this->thread);
}
bool Mthread::initThread(std::list<std::string> *list, DWORD ID)
{
this->save = list;
this->thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Mthread::ThreadFunc, (LPVOID)list, 0, &ID);
if (this->thread == NULL)
{
std::cout << "Erreur lors du lancement du thread" << std::endl;
return (false);
}
else
{
return (true);
}
}
void Mthread::ThreadFunc(LPVOID list)
{
std::cout << " is launch" << std::endl;
}
コードは機能していますが、小さな問題があります。端末に文字列が書き込まれていません。
bool Mthread::initThread(std::list<std::string> *list, DWORD ID)
{
this->save = list;
this->thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Mthread::ThreadFunc, (LPVOID)list, 0, &ID);
if (this->thread == NULL)
{
std::cout << "Erreur lors du lancement du thread" << std::endl;
return (false);
}
else
{
std::cout << "OK" << std::endl;
return (true);
}
}
まあ、「OK」と「打ち上げである」端末上で5回書き込まれます。私は自分のコードを変更した場合 しかし、なぜか分からない。 小さな文字列aをcout
に渡すと動作しているようですが、何も書かれていないときは何も書かれていません。
何が起こりますか?あなたのstd :: list/stackの目的は何ですか?あなたは「小さな叙情」を意味するのですか? – wolfgang
まあ、 'Sleep(4);'を追加した後、5つではなく 'launch'が1つしか書かれません。スレッドの終了を待っている関数を知っていますか? –