作者montreal (╮(╯3╰)╭)
看板C_and_CPP
标题[问题] 困扰的thread in vector
时间Mon Feb 2 16:12:51 2009
大家好!
被下面这个问题困扰很久…
一个class,在建构子启动一条win32 thread。
class CThd
{
public:
CThd():flag(1) {
CloseHandle(CreateThread(NULL, NULL, ThdApp, this, NULL, NULL));
}
static DWORD WINAPI ThdApp(LPVOID pvoid) {
while (((CThd*)pvoid)->flag)
cout << "running.." << endl;
return 0;
}
INT flag;
};
现在,想把这个class放到vector里面。
问题来了,用方法一还是方法二呢?
int main()
{
// 方法一
vector<CThd> vec;
vec.push_back(
CThd());
Sleep(10);
vec.at(0).flag = 0;
// 方法二
vector<CThd*> vec;
vec.push_back(
new CThd);
Sleep(10);
vec.at(0)->flag = 0;
delete vec.at(0); // 我是乖小孩
system("PAUSE");
return 0;
}
结果方法一造成thread停不下来!
而方法二正确的把thread停下来了。
请问,这两个方法有哪里不同吗?
谢谢!
montreal
相关includes
#include <windows.h>
#include <iostream>
#include <vector>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.87.64.222
※ 编辑: montreal 来自: 219.87.64.222 (02/02 16:58)
1F:推 jlovet:方法一改成 vector<CThd &> vec; 放reference看看 02/02 18:40
2F:→ jlovet:我猜是你放object进去vector是会复制一份... 02/02 18:40