请问能否在一个线程里多次创建另一个线程呢? (100分)

  • 主题发起人 主题发起人 tresa
  • 开始时间 开始时间
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(n);
end;
until n=SamplePoint div 1024;
Calculatethread:=CJCalculateThread.Create(false);
Sleep(1000);
end;
end;
但是总是采集线程里的数据(并非全0)可以传递到数组SignalDomain里,而运算线程里用数组SignalDomain的时候却全部显示为0。这是怎么回事呀,是不是没有执行运算线程呀?我单步测试过,第一次是可以的,以后好像就不行了,这是什么意思呀?难道不能这样创建吗?
 
没有问题。
 
我调试看了一下,好像采集过来的数据始终不能传到下一个线程里,然后就莫名其妙地丢失了,请问这是哪里出了什么问题呀?
 
在Calculatethread:=CJCalculateThread.Create(false);
后把线程挂起,在CJCalculateThread结束后唤醒线程 --试一下,没验证过
 
数组SignalDomain的内容应该作为参数传给新建线程,而不应该作为一个全局变量使用。
 
后退
顶部