【发布时间】:2011-12-05 15:39:42
【问题描述】:
我有一个关于 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 类的 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”和“is launch”在终端上写了 5 次。我不明白为什么。
当我将一个小字符串 a 传递给 cout 时,它似乎正在工作,但是当我没有写任何东西时。
【问题讨论】:
-
您预计会发生什么?你的 std::list/stack 的目的是什么?您所说的“关于 cout 的小文字”是什么意思?
-
好吧,在我添加
Sleep(4);之后,只有一个is launch正在写入而不是5。你知道一个函数正在等待线程的结束执行吗?
标签: c++ windows multithreading process