我想創建一個boost線程,我看到線程已創建,但控件不會來到線程函數。有人能解釋爲什麼這樣嗎?Boost線程不調用線程函數
請參閱下面的代碼使用。
header_file.h
class fa {
public:
fa();
~fa();
int init(void);
static void* clThreadMemFunc(void *arg) { return ((fa*)arg)->collectData((fa*)arg); }
void* collectData(fa *f);
private:
int m_data;
boost::thread *m_CollectDataThread;
};
`
TEST.CPP
int fa::init(void)
{
if (m_CollectDataThread== NULL)
{
printf("New Thread...\n");
try
{
m_CollectDataThread =
new boost::thread((boost::bind(&fanotify::clThreadMemFunc, this)));
}
catch (...){perror("Thread error ");}
printf("m_CollectDataThread: %p \n", m_CollectDataThread);
}
return 0;
}
void* fa::collectData(fa *f)
{
printf("In collectData\n");
int data = f->m_data;
printf("data %d",data);
}
的test.cpp
得到遵守/內置作爲庫(test.so
)和另一主函數調用init
功能。我看到變量m_collectDataThread
值從null更改爲某個值(線程被創建)並且捕獲也沒有得到任何異常。
但我沒有看到在獲得印刷任何聲明。爲什麼線程無法達到它?
也許你應該等待線程完成?甚至開始? –
_'if(m_CollectDataThread == NULL)'_任何可用的代碼,你實際用'NULL'初始化'm_CollectDataThread'的地方? –
@Alan如何確保線程啓動? – Namitha