请问能否在一个线程里多次创建另一个线程呢?
请教大家,能否在一个线程里创建另一个线程,而且是重复创建?我有一个采集线程,一个运算线程,我希望能在采集线程里不断创建运算线程并执行运算。我在采集线程里的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-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);
但是总是采集线程里的数据(并非全0)可以传递到数组SignalDomain里,而运算线程里用数组SignalDomain的时候却全部显示为0。这是怎么回事呀,是不是没有执行运算线程呀?我单步测试过,第一次是可以的,以后好像就不行了,这是什么意思呀?难道不能这样创建吗?
问题点数:50、回复次数:5Top
1 楼tresa(瞌睡天使)回复于 2003-12-03 11:58:57 得分 0
对了,我把最后两句改成:
Calculatethread:=CJCalculateThread.Create(true);
Sleep(1000);
Calculatethread.Resume;
测试第一次还可以通过,也就是第一次建立运算线程的时候可以通过,以后就不行呢,这是怎么回事呢?Top
2 楼Seahilly(小峰)回复于 2003-12-03 13:35:54 得分 50
可以,但是被创建的线程应该是可重入的,否则会引起混乱。Top
3 楼Seahilly(小峰)回复于 2003-12-03 13:37:28 得分 0
好象用TThread类不行,我没试过。我是用 BeginThread API函数创建线程的。Top
4 楼tresa(瞌睡天使)回复于 2003-12-03 15:29:15 得分 0
我调试看了一下,好像在Sleep之前,数组传递的还是很好的,但是只要一回到执行
“while (not Terminated) do”这一句,数组就莫名其妙地丢失了,请问这是哪里出了什么问题呀?Top
5 楼tresa(瞌睡天使)回复于 2003-12-03 16:01:51 得分 0
好像采集来得数据始终不能传到下一个线程(运算线程)里,就莫名其妙地丢失了。不知道是什么问题呀?我的运算线程里只是做了一个数据的显示,简单的代码应该没有问题吧。Top




