我有一个Visual C ++程序,它在FILE* fp = fopen(...)
的一个线程中打开一个文件。我希望该线程阻塞事件对象,而另一个线程读取该文件,然后在阻塞的线程完成时发出信号,然后关闭该文件。因为fp
在线程之间共享,所以我将其声明为volatile FILE* fp
。但是,fread()
不会接受volatile作为其FILE*
参数。我尝试使用一个本地指针,在调用FILE* fpLocal = fp;
的线程中使用fread()
,但这让我知道了:
Error: a value of type "volatile FILE*" cannot be assigned to an entity of type "FILE*"
当然,这让我担心我可能会因为尝试在一个线程中打开一个文件并在另一个线程中读取它而犯了一个错误,但我不明白为什么(还)。
有人可以帮我吗?为什么我无法将volatile FILE*
分配给FILE*
?
答案 0 :(得分:3)
为什么我无法将volatile FILE*
分配给FILE*
?
因为C ++有严格的类型检查,你不能分配彼此不匹配的类型
如果是这种情况,则需要使用铸造操作员,但重要的是要注意不正确地使用铸造操作员也可能导致未定义的行为。
此行为与const
限定符相同。
正如评论中已经提到的那样,volatile
不是这里的方式。