我想提供一個類,它在讀取某些數據(udp數據包或來自文件)時保存緩衝區。一切都很好,如果我從主開始我的線程,但在這種情況下,我想避免,用戶必須爲自己設置一個新的線程。C++ 11線程 - 從類內部開始無限工作線程
所以這裏是我的代碼那樣簡單我可以使它:
class DataCollector
{
void startCollect()
{
std::thread t1(readSource);
}
bool readSource()
{
while(1)
{
// read some data for storage
}
}
}
int main()
{
DataCollector myDataCollector;
myDataCollector.startCollect();
while(1)
{
// do some other work, for example interpret the data
}
return 0;
}
現在我需要你的幫助。如何在startCollect中調用此線程?
編輯1: 這裏是我如何工作的例子現在!
// ringbuffertest.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include <thread>
#include <Windows.h>
class DataCollector
{
private:
//std::thread collecterThread;
public:
DataCollector(){}
void startCollect()
{
readSource();
}
bool readSource()
{
while (1)
{
printf("Hello from readSource!\n");
Sleep(1000);
}
return false;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
DataCollector myDataCollector;
std::thread t1(&DataCollector::startCollect, std::ref(myDataCollector));
t1.join();
return 0;
}
但正如我所說我想隱藏我的startCollect函數內的線程調用。
線程不應該是DataCollector的屬性嗎?然後你可以在構造函數中實例化它並在startCollect中啓動它。 –
您將需要一個緩衝區(或兩個)並使用condition_variable通知每個線程已提供一些數據。 –
你我知道我的緩衝區。我只是從我的程序中扔出一切,使其儘可能簡單。 –