CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

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

楼主tresa(瞌睡天使)2003-12-03 11:52:59 在 Delphi / VCL组件开发及应用 提问

请教大家,能否在一个线程里创建另一个线程,而且是重复创建?我有一个采集线程,一个运算线程,我希望能在采集线程里不断创建运算线程并执行运算。我在采集线程里的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

相关问题

  • 一个在主线程中的子线程能否在线程函数中创建自己的子线程呢?
  • 创建线程!!!
  • 创建线程
  • 创建线程CreateThread的参数能否是一个对象的地址?
  • 用CreateThread(...)创建线程...?
  • 如何创建多线程
  • 创建线程问题。
  • 多次创建相同的线程,他们的代码段和局部变量是共用的吗
  • 请问创建线程时,怎样给线程传递参数??
  • 在vc中动态创建线程

关键词

  • 线程
  • 数据
  • 执行
  • 运算
  • 创建
  • 数组
  • 采集线程
  • calculatethread
  • signaldomain
  • 传递

得分解答快速导航

  • 帖主:tresa
  • Seahilly

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo