[英]Global variables in C++
我正在使用一些帶有計時器的C ++代碼,計時器運行此代碼:
char buf[1024];
ZeroMemory(&buf, sizeof(buf));
somefunction(buf); // this put stuff into buf
otherfunction(buf); // this do stuff with buf
somefunction()發出Web請求,InternetReadFile()將數據放入“ buf”
但是我需要能夠在下次執行計時器時讀取前一個buf。 如何將buf存儲在全局var中,並在必要時重新分配它或使“ buf”等於先前存儲的值?
如果不必處理多個線程同時訪問Timer操作函數,則可以將buf
設置為該函數范圍內的靜態變量,也可以將其設為匿名名稱空間中的文件變量(或者,如果您未更改,則為像我這樣的C程序員,放入文件靜態變量)。 然后,您確保代碼不會將內存歸零,直到您知道不想再次查看舊數據為止。
要么:
void timer_action(void)
{
static char buf[1024];
...use buf carefully...
}
要么:
namespace {
char buf[1024];
}
void timer_action(void)
{
...use buf carefully...
}
如果沒有其他需要的緩沖區,則將其隱藏在函數中可將范圍最小化,這是首選解決方案。
如果確實涉及多個線程,則必須格外小心,使用適當的線程同步原語以確保對變量的順序訪問,或者必須在線程本地存儲中為變量創建每個線程的副本。
如果您需要舊的RAW數據是不是有問題? 而是從當前RAW緩沖區中提取感興趣的片段,並將其作為成員變量存儲在您的類中。 對於下一次讀取,相關狀態可用。 如果您的代碼是關於狀態轉換的,那么狀態設計模式在這里也可能會有所幫助。
@Jonathan指出,這將幫助您避免與靜態變量相關的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.