簡體   English   中英

C ++中的全局變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM