2つのスレッド間で変数を共有しています。そして、最適化を避けるためにvolatileを使用します。
ただし、strcpyにvolatileがない場合はエラーが表示されます。(以下のように)
このエラーを適切に修正するにはどうすればよいですか?
ある人が私に揮発性物質を型キャストするように言った。しかし、volatileを捨てると、volatileの目的が失われ、最適化によってランタイムエラーが発生する可能性があります。
どうもありがとうございます。
(コードは直接コンパイルできます)
CRITICAL_SECTION CriticalSection;
HANDLE hEvent;
void __cdecl MyThread(void* name)
{
char serName[256];
volatile char* vptr = (char*) name;
EnterCriticalSection(&CriticalSection);
strcpy(serName, vptr); // error : cannot convert 'volatile'
// use (and not modify) name…
LeaveCriticalSection(&CriticalSection);
SetEvent (hEvent) ;
}
void main ()
{
char name[256] = "abcde";
hEvent = CreateEvent (NULL, false, false, NULL) ;
if (!InitializeCriticalSectionAndSpinCount(&CriticalSection, 0x80000400) )
return;
_beginthread (MyThread, 0, name) ;
EnterCriticalSection(&CriticalSection);
// access name…
LeaveCriticalSection(&CriticalSection);
WaitForSingleObject (hEvent, INFINITE) ;
DeleteCriticalSection(&CriticalSection);
CloseHandle (hEvent);
system("pause");
}
一方、volatileをサポートするために独自のstrcpyを作成することもできます。しかし、これは奇妙です。もしそうなら、私はvolatileを使用するたびに、独自のI / Oストリーム(またはそれらの複雑な関数)を作成する必要があるのでしょうか?
答えてくれてありがとう。