发表于:2003-12-19 14:22:00
楼主
我用PCI9114HG采集卡编了一个采集数据、运算和显示的程序。我将采集放在了一个线程里,在采集线程里我又同时创建了运算线程,具体代码如下(Delphi6):
procedure SampleThread.Execute;
begin
datasize:=1024*32;
datasize:=datasize div 2;
while (not Terminated) do
begin
n:=0;
repeat
begin
repeat
AI_AsyncDblBufferHalfReady(card,HalfReady,StopFlag);//判断缓冲区是否半满
until HalfReady=0;
AI_AsyncDblBufferTransfer(card,aiBuffer[0]);//传递数据
for i:=0 to datasize*2-1 do
begin
aiasyn_Buffer[i]:=aiBuffer[i] and 65535;
aidata_Buffer[i]:=aiasyn_Buffer[i]*10/32767.0-10.0;
end;
for i:=0 to 1023 do
begin
for j:=0 to 31 do
begin
SignalDomain[j,i+1024*n]:=aidata_Buffer[j+32*i];
end;
end;
inc(n);
end;
until n=SamplePoint div 1024;
Calculatethread:=CJCalculateThread.Create(false);//创建运算线程并立即执行
Sleep(1000);
end;
end;
这段代码每次运行到Sleep前面的时候,数组里的数据还是有的(不全为0),但是每当回到判断While not Terminated do的时候,数据就莫名其妙地全为0 了,所以导致我的运算线程总是接受不到数据,请问这是什么问题呀,是不是我的函数运用不对呀?或者是采集参数错误了吗?
我的采集参数为:
Number of Scan:1024
Buffer Allocated(KB):256