15,471
社区成员
发帖
与我相关
我的任务
分享
int a;
for (;;)
{
int olda=0;
while(a==olda)
Sleep(1);
//时隙1
olda=a;
f();
}
volatile int a;
for (;;)
{
int olda=0;
int newa;
while((newa=a)==loda)
Sleep(1);
//时隙1
olda=newa;
f();
}
template <class T>
class Atom
{
T tValue;
HANDLE hEvent;
public:
Atom()
{
hEvent = CreateEvent(0, true, false, 0); // 手动重置, 初始无信号
}
~Atom()
{
CloseHandle(hEvent);
}
void Set(T newValue)
{
tValue = newValue;
//时隙2
PulseEvent(hEvent);
}
BOOL Wait(T oldValue, DWORD ms)
{
if (tValue != oldValue)
return true;
else
//时隙3
return WaitForSingleObject(hEvent, ms) == WAIT_OBJECT_0;
}
void operator =(T newValue)
{
if (tValue != newValue)
Set(newValue);
}
operator T()
{
return tValue;
}
};