T
tresa
Unregistered / Unconfirmed
GUEST, unregistred user!
请教大家,能否在一个线程里创建另一个线程,而且是重复创建?我有一个采集线程,一个运算线程,我希望能在采集线程里不断创建运算线程并执行运算。我在采集线程里的Execute过程里写的代码是这样的:
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-1do
begin
aiasyn_Buffer:=aiBuffer and 65535;
aidata_Buffer:=aiasyn_Buffer*10/32767.0-10.0;
end;
for i:=0 to 1023do
begin
for j:=0 to 31do
begin
SignalDomain[j,i+1024*n]:=aidata_Buffer[j+32*i];
end;
end;
inc;
end;
until n=SamplePoint div 1024;
Calculatethread:=CJCalculateThread.Create(false);
Sleep(1000);
end;
end;
但是总是采集线程里的数据(并非全0)可以传递到数组SignalDomain里,而运算线程里用数组SignalDomain的时候却全部显示为0。这是怎么回事呀,是不是没有执行运算线程呀?我单步测试过,第一次是可以的,以后好像就不行了,这是什么意思呀?难道不能这样创建吗?
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-1do
begin
aiasyn_Buffer:=aiBuffer and 65535;
aidata_Buffer:=aiasyn_Buffer*10/32767.0-10.0;
end;
for i:=0 to 1023do
begin
for j:=0 to 31do
begin
SignalDomain[j,i+1024*n]:=aidata_Buffer[j+32*i];
end;
end;
inc;
end;
until n=SamplePoint div 1024;
Calculatethread:=CJCalculateThread.Create(false);
Sleep(1000);
end;
end;
但是总是采集线程里的数据(并非全0)可以传递到数组SignalDomain里,而运算线程里用数组SignalDomain的时候却全部显示为0。这是怎么回事呀,是不是没有执行运算线程呀?我单步测试过,第一次是可以的,以后好像就不行了,这是什么意思呀?难道不能这样创建吗?