我有一個Visual C++程序,用FILE* fp = fopen(...)
在一個線程中打開一個文件。我希望該線程在事件對象上阻塞,而另一個線程讀取該文件,然後在阻塞的線程完成時發出信號,然後關閉該文件。因爲線程之間共享fp
,所以我宣佈它爲volatile FILE* fp
。但是,fread()
不會接受volatile作爲其FILE*
參數。我試圖用一個本地指針,在該線程將調用fread()
FILE* fpLocal = fp;
,但是這讓我這個:爲什麼不能將FILE *分配給FILE *?
Error: a value of type "volatile FILE*" cannot be assigned to an entity of type "FILE*"
,這自然有我擔心,也許我試圖打開一個文件犯了一個錯誤在一個線程中,並在另一個線程中讀取它,但我不明白爲什麼(還)。
有人可以幫助我嗎?爲什麼我不能將volatile FILE*
分配給FILE*
?
放下'volatile'。它與線程無關。 –
由於無法爲'FILE *'指定'const FILE *',但是作爲@ R.MartinhoFernandes指出的原因,您不能將'volatile FILE *'指定給'FILE * 「揮發性」在這裏是非常錯誤的開始。 – ildjarn
volatile唯一保證的是,每次訪問volatile變量都會導致加載/存儲(和AFAIK,這對於將內存映射到I/O設備等的系統很有用。標準,例如,甚至沒有提到「線程」這個詞) – ArjunShankar