2012-10-16 17 views
1

我創建了一個類,它讀取文件並對內容執行一些操作並使用時間戳保存新文件。但是,我需要以這樣的方式執行,即代碼應該檢查每一分鐘文件是否存在。如果是的話,它應該處理文件。它需要在跨平臺上工作。檢查文件在n分鐘中存在一次C++

我是C++的新手,需要知道我需要遵循的方法。我是否需要創建流程或其他內容?我完全空白。

class inputHandler 
{ 
public: 

void readInput(); 
void performTask(); 
void saveFile(); 
}; 

由於代碼實現太大,只是我發佈結構。我準備花時間在此。所以,我需要一個可以指導我實現這個功能的示例教程。

+2

告訴我們更多關於環境的信息。你需要跨平臺嗎? C++ 11可以嗎?升壓可以嗎? – qdii

+0

什麼操作系統?有了Linux,你可以使用'access'系統調用。你可能想要使用'inotify'來通知,它被刪除或觸摸。 –

+0

是的,我編輯了我的帖子..我需要一個跨平臺的實現。 – srinath

回答

1

這不是由C++標準解決的。因此,您必須爲每個支持的系統實現代碼,或使用庫。

據我所知,最一般的解決方案是創建一個線程,每分鐘循環一次,檢查文件時間戳。當然,取決於你的代碼,你可以用另一種方式來做,避免任何線程。使用通知系統(如inotify)可能會更好。此外,您可以在POSIX兼容系統上使用alarm(),每分鐘過去一段時間都會報警。

無論如何,如果你使用線程解決方案,在POSIX兼容系統中,請查看pthread_create()stat()。在Windows中,請查看CreateThread()GetFileTime()。要延遲一分鐘,分別應該使用sleep(60000)Sleep(60000)

爲了澄清,「創建一個過程」是系統的編程術語,意思是大致「啓動一個新程序」(或「線程」,有時)。從這個意義上講,如果你遵循上面的話,你將會創建一個新的線程。當您打開一個std::ifstream這將是良好的狀態只有在文件存在:

std::ifstream in(filename); 
if (in) { 
    // the file exists and can be processed here 
} 

更有趣的部分是做定期的東西,如果一個文件存在

1

簡單的部分檢查。基本的想法是以某種形式設置計時器。根據是否需要做其他事情,您可能需要一個單獨的線程:如果程序只是等到文件存在並且在此期間不做任何事情,那麼您可以休眠並且不需要產生另一個線程。否則,你可能想要產生一個正在睡覺的線程。

假設您需要使用單獨的線程,您可能希望能夠阻止它等待,例如,以獨立線程的條件從乾淨的方式退出。因此,我會用一個條件變量與定時等待,即,是這樣的:

std::mutex    guard; 
std::condition_variable condition; 
bool     done(false); 

std::unique_lock<std::mutex> lock(guard); 
while (!done) { 
    condition.wait_for(lock, std::chrono::minutes(n)); 
    if (!done) { 
     do_whatever_needs_to_be_done_once_every_n_minutes(); 
    } 
} 

上面的代碼使用C++ 2011和設施。如果您不能使用相應的類,則可以使用合適的替代方法,例如Boost類。