先大致说说我的想法,程序是用来仿真的。
假设内存中的两个区域,要保证每隔30ms区域RamA
向RamB写入256个字节的数据。程序对这个周期的要求
比较苛刻,最好不要超过35ms。由于要一直保持这个循环,所以我
使用了死循环,感觉不太好,也不知道有没有别的办法。
由于在没有达到读写周期的时候,RamA和RamB
都可能被主进程所修改,因此,我想使用两个
临界段来保证数据修改的原子性。
也就是主线程中使用一个,下面的传输线程中使用一个。
(我是新手mutex和信号量,我不会用,所以就选临界段了)
下面是我的程序,本来感觉提取时间也应该锁定,
防止周期不准,可是发现要是连提取时间也锁定了,
就把整个内存区域一直锁住了,
也不知道怎么修改现有的程序,调试工具我也不知道有什么
书籍看了一些win32多线程编程,可惜上面的例子太少了。
操作系统原来没有看过,不知道大家有没有什么好的资料
给我推荐一下,谢谢了UINT CTransProc(LPVOID pParam)
{
::timeBeginPeriod(1);
DWORD former=::timeGetTime();
         InitializeCriticalSection(&critical_transfer);
while(true){ //从每次计算时间间隔开始就必须是原子操作
if((::timeGetTime()-former)>=30) //time interval is 30ms
{  
EnterCriticalSection(&critical_transfer);
former=::timeGetTime();//refresh old timer
MoveFromAtoB(RamA,RamB);//内存区域的搬移
LeaveCriticalSection(&critical_transfer); }
else
{
::Sleep(5); //暂时挂起5ms
}

}
//DeleteCriticalSection(&critical_transfer);
::timeEndPeriod(1);
return 0;
}