我想爲每個Page
對象的實例都有一個線程。在一個時間只有一個可以執行(只檢查指針指向當前正在運行的線程是可連接或不..)std :: thread:如何在類體中聲明一個線程作爲普通成員?
class Page : public std::vector<Step>
{
// ....
void play();
void start(); // check if no other thread is running. if there is a running thread, return. else join starter
std::thread starter; // std::thread running this->play()
static std::thread* current; // pointer to current running thread
// ...
};
我希望能夠火起來Page
對象starter
線程。例如這樣的:
Page x , y , z;
// do some stuff for initialize pages..
x.start();
// do some other work
y.start(); // if x is finished, start y otherwise do nothing
// do some other lengthy work
z.start(); // if x and y are not running, start z
我不能管理申報started
作爲Page
成員。我發現這是因爲std::thread
只能在聲明時初始化。 (或類似的東西,導致它不可能複製一個線程)
void x()
{
}
//...
std::thread t(x); // this is ok
std::thread r; // this is wrong, but I need this !
r = std::thread(this->y); // no hope
r = std::thread(y); // this is wrong too
Arrg我的眼睛初始化順序的問題!一個共享的靜態容器繼承。 – 2012-02-13 19:35:08
@deft_code:我知道容器繼承的問題。考慮到我的'頁面'對象的生命週期與整個程序的生命週期有關,頁面的析構函數將永遠不會被調用,直到所有事情完成,甚至分段錯誤並不重要。 (我試圖避免重寫幾個3周齡的2500行代碼,而YES,我是有史以來最慢的cs的學生......) – 2012-02-13 20:03:37
你想要什麼時候做'y'什麼時候做'x'仍然很忙?這聽起來像你希望它默默無聞,但這看起來不對。如果'start'被調用兩次,'Page'會做什麼? – 2012-02-13 20:59:05