已经做三个星期了  从开始最简单的  到现在多线程序  请各位大哥指点一下 老师安排任务重 我BCB刚学   压力好大 
下面是源程序  请指点一下  我会高分相送的  
这个是Unit1.cpp的内容//---------------------------------------------------------------------------
#include <vcl.h>
#pragma   hdrstop
#pragma  hdrstop
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "D2kDask.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#define Basetime        400000
#define SCANCOUNT       10
#define ADCONVERTSRC    DAQ2K_AI_ADCONVSRC_Int
#define ADTRIGSRC       DAQ2K_AI_TRGSRC_SOFT
#define ADTRIGMODE      DAQ2K_AI_TRGMOD_DELAY
#define ADTRIGPOL       DAQ2K_AI_TrgPositive
#define BUFAUTORESET    1
#define SCAN_INTERVAL   4000
#define DELAYCOUNT      0
#define DELAYMODE       DAQ2K_AI_Dly1InTimebase
double i=0;
double y=0;
U16 inputRangeCH1;
U16 inputRangeCH2;
U16 inputRangeCH3;
U16 inputRangeCH4;
U16 rangeCH1;
U16 rangeCH2;
U16 rangeCH3;
U16 rangeCH4;
double ampAlarm1;
double ampAlarm2;
unsigned char halfReady=0;
unsigned char fstop;
U16 Card_ID=-1;
I16  err;
FILE    *svfile;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox5Click(TObject *Sender)
{    if(CheckBox5->Checked)
    {
     Memo1->Lines->Add("保存原始采集数据");
     GroupBox2->Caption="保存原始采集数据";
     svfile = fopen("MMMData.dat", "w");
     }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
      err = D2K_AI_CH_Config (Card_ID, 0, inputRangeCH1);
    if (err!=NoError)
    {
      Memo1->Lines->Add("D2K_AI_CH_Config failed!");
      exit(1);
    }
    else
    {
    Memo1->Lines->Add("D2K_AI_CH_Config Sucess!");
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ComboBox1->Items->Add("-5~5 V");
    ComboBox1->Items->Add("-2.5~2.5 V");
    ComboBox1->Items->Add("-1.25~1.25 V");
    ComboBox1->Items->Add("0~10 V");
    ComboBox1->Items->Add("0~5 V");
    ComboBox1->Items->Add("0~2.5 V");
    ComboBox1->Items->Add("0~1.25 V");
    ComboBox1->Items->Add("-10~10 V");
    ComboBox1->ItemIndex = 0;    ampAlarm1 = Edit5->Text.ToDouble();
    ampAlarm2 = Edit6->Text.ToDouble();    Card_ID=D2K_Register_Card(DAQ_2010, 0);
    if (Card_ID < 0)
    {
     Memo1->Lines->Add("D2K_Register_Card Error");
     exit(-1);
     }
     else
    {
     Memo1->Lines->Add("D2K_Register_Card Sucess:2010");
    }     thread1=new TMyThread1(true);    //创建线程对象
     thread2=new TMyThread1(true);    //创建线程对象
     thread3=new TMyThread2(true);    //创建线程对象
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
    err = D2K_AI_Config(Card_ID,ADCONVERTSRC,ADTRIGSRC|ADTRIGMODE|ADTRIGPOL|DELAYMODE,DELAYCOUNT,0,0,BUFAUTORESET);
     if (err!=0)
      {
        Memo1->Lines->Add("DAQ_2010 config error");
        exit(1);
      }
      else
      {
        Memo1->Lines->Add("DAQ_2010 config Sucess");
      }
      err=D2K_AI_AsyncDblBufferMode(Card_ID,1);
      if(err!=NoError)
      {
        Memo1->Lines->Add("DAQ_2010 Buffer setting error");
        exit(1);
      }
      else
        {
       Memo1->Lines->Add("DAQ_2010 Buffer setting Sucess");
        }}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ampAlarm1 = Edit5->Text.ToDouble();
    ampAlarm2 = Edit6->Text.ToDouble();
    Memo1->Lines->Add("报警上限设置成功");
    Memo1->Lines->Add("报警下限设置成功");}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Button2->Enabled = false;
    Button3->Enabled = true;
    thread1->Resume();
    thread2->Resume();
   
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Button2->Enabled = true;
    Button3->Enabled = false;
    thread1->Terminate();
    thread2->Terminate();
    thread3->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
    Shape1->Brush->Color = clWhite;        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
   
     switch(ComboBox1->ItemIndex)
    {
        case 1:
        inputRangeCH1 = AD_B_5_V;
        rangeCH1 = 10;
        break;        case 2:
        inputRangeCH1 = AD_B_2_5_V;
        rangeCH1 = 5;
        break;        case 3:
        inputRangeCH1 = AD_B_1_25_V;
        rangeCH1 = 2.5;
        break;        case 4:
        inputRangeCH1 = AD_U_10_V;
        rangeCH1 = 10;
        break;        case 5:
        inputRangeCH1 = AD_U_5_V;
        rangeCH1 = 5;
        break;        case 6:
        inputRangeCH1 = AD_U_2_5_V;
        rangeCH1 = 2.5;
        break;        case 7:
        inputRangeCH1 = AD_U_1_25_V;
        rangeCH1 = 1.25;
        break;        default:
        inputRangeCH1 = AD_B_10_V;
        rangeCH1 = 20;    }       
}
//---------------------------------------------------------------------------void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
  
     switch(ComboBox2->ItemIndex)
    {
        case 1:
        inputRangeCH2 = AD_B_5_V;
        rangeCH2 = 10;
        break;        case 2:
        inputRangeCH2 = AD_B_2_5_V;
        rangeCH2 = 5;
        break;        case 3:
        inputRangeCH2 = AD_B_1_25_V;
        rangeCH2 = 2.5;
        break;        case 4:
        inputRangeCH2 = AD_U_10_V;
        rangeCH2 = 10;
        break;        case 5:
        inputRangeCH2 = AD_U_5_V;
        rangeCH2 = 5;
        break;        case 6:
        inputRangeCH2 = AD_U_2_5_V;
        rangeCH2 = 2.5;
        break;        case 7:
        inputRangeCH2 = AD_U_1_25_V;
        rangeCH2 = 1.25;
        break;        default:
        inputRangeCH2 = AD_B_10_V;
        rangeCH2 = 20;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox3Change(TObject *Sender)
{
   switch(ComboBox3->ItemIndex)
    {
        case 1:
        inputRangeCH3 = AD_B_5_V;
        rangeCH3 = 10;
        break;        case 2:
        inputRangeCH3 = AD_B_2_5_V;
        rangeCH3 = 5;
        break;        case 3:
        inputRangeCH3 = AD_B_1_25_V;
        rangeCH3 = 2.5;
        break;        case 4:
        inputRangeCH3 = AD_U_10_V;
        rangeCH3 = 10;
        break;        case 5:
        inputRangeCH3 = AD_U_5_V;
        rangeCH3 = 5;
        break;        case 6:
        inputRangeCH3 = AD_U_2_5_V;
        rangeCH3 = 2.5;
        break;        case 7:
        inputRangeCH3 = AD_U_1_25_V;
        rangeCH3 = 1.25;
        break;       default:
        inputRangeCH3 = AD_B_10_V;
        rangeCH3 = 20;
    }        
}
//---------------------------------------------------------------------------void __fastcall TForm1::ComboBox4Change(TObject *Sender)
{
  
    switch(ComboBox4->ItemIndex)
    {
        case 1:
        inputRangeCH4 = AD_B_5_V;
        rangeCH4 = 10;
        break;        case 2:
        inputRangeCH4 = AD_B_2_5_V;
        rangeCH4 = 5;
        break;        case 3:
        inputRangeCH4 = AD_B_1_25_V;
        rangeCH4 = 2.5;
        break;        case 4:
        inputRangeCH4 = AD_U_10_V;
        rangeCH4 = 10;
        break;        case 5:
        inputRangeCH4 = AD_U_5_V;
        rangeCH4 = 5;
        break;        case 6:
        inputRangeCH4 = AD_U_2_5_V;
        rangeCH4 = 2.5;
        break;        case 7:
        inputRangeCH4 = AD_U_1_25_V;
        rangeCH4 = 1.25;
        break;        default:
        inputRangeCH4 = AD_B_10_V;
        rangeCH4 = 20;
    }
}
//---------------------------------------------------------------------------

解决方案 »

  1.   

    这个是Unit2.cpp的内容//---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "stdio.h"
    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit3.h"
    #include "conio.h"
    #include "math.h"
    #include "D2kDask.h"
    #pragma package(smart_init)
    #define SCAN_INTERVAL   4000
    #define SCANCOUNT       10
    U16 Id;
    U16 tmpId = 0;
    U32 count1,startPos;
    I16 Err;
    short ai_buf[10];
    short ai_buf2[10];
    double write_to_file(short *buf,unsigned long write_count)
        {    U32 i;
             double y0=0;
             for(i=0;i<write_count; i++)
             {
              fprintf(svfile,"0x%04x(%4.2fV)\n", buf[i]&0xffff,((F64)(buf[i]>>2))/8192*10.0);
              y0+=((F64)(buf[i]>>2))/8192*10.0;
              }
              y=y0/10;
              return y;
        }
    //---------------------------------------------------------------------------//   Important: Methods and properties of objects in VCL can only be
    //   used in a method called using Synchronize, for example:
    //
    //      Synchronize(UpdateCaption);
    //
    //   where UpdateCaption could look like:
    //
    //      void __fastcall TMyThread1::UpdateCaption()
    //      {
    //        Form1->Caption = "Updated in a thread";
    //      }
    //---------------------------------------------------------------------------__fastcall TMyThread1::TMyThread1(bool CreateSuspended)
            : TThread(CreateSuspended)
    {
        FreeOnTerminate=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TMyThread1::Execute()
    {
        Err=D2K_AI_ContBufferSetup(0,ai_buf,SCANCOUNT,&Id);
        Err=D2K_AI_ContBufferSetup(0,ai_buf2,SCANCOUNT,&Id);
        Err = D2K_AI_ContReadChannel(0,0,Id,SCANCOUNT,SCAN_INTERVAL,SCAN_INTERVAL,ASYNCH_OP);
        if (Err!=0)
           {
             exit(1);
            }
       while(!Terminated)
         {
            do {
                 D2K_AI_AsyncDblBufferHalfReady(0, &halfReady, &fstop);
               }
            while (!halfReady&!fstop); //Here to handle the data stored in ready buffer
            if(Form1->CheckBox5->Checked)
            {
              write_to_file( tmpId?ai_buf2:ai_buf, SCANCOUNT);
              tmpId=(tmpId+1)%2;
             }
             Synchronize(AlarmSetting);//管理线程同步
           }
    }
    //---------------------------------------------------------------------------
     void __fastcall TMyThread1::AlarmSetting()
     {
            if(y > ampAlarm1)
            {
             Form1->Shape1->Brush->Color = clRed;
            }
           if(y < ampAlarm2)
            {
             Form1->Shape1->Brush->Color = clYellow;
            }
     }
    //---------------------------------------------------------------------------这个是UNIT3。CPP的内容//---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma  hdrstop
    #include "stdio.h"
    #include "conio.h"
    #include "math.h"
    #include "Unit1.h"
    #include "Unit2.h"
    #include "Unit3.h"
    #include "Unit1.cpp"
    #include "Unit2.cpp"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------//   Important: Methods and properties of objects in VCL can only be
    //   used in a method called using Synchronize, for example:
    //
    //      Synchronize(UpdateCaption);
    //
    //   where UpdateCaption could look like:
    //
    //      void __fastcall TMyThread2::UpdateCaption()
    //      {
    //        Form1->Caption = "Updated in a thread";
    //      }
    //---------------------------------------------------------------------------__fastcall TMyThread2::TMyThread2(bool CreateSuspended)
            : TThread(CreateSuspended)
    {
          FreeOnTerminate=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TMyThread2::Execute()
    {
           if(Terminated)
            {
            exit(1);
             }      if(halfReady&fstop)
          Form1->Series1->Add(y,i);
    }
    //---------------------------------------------------------------------------这个是UNIT1。H的内容//---------------------------------------------------------------------------#ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Chart.hpp>
    #include <ComCtrls.hpp>
    #include <ExtCtrls.hpp>
    #include <Grids.hpp>
    #include <Series.hpp>
    #include <TeEngine.hpp>
    #include <TeeProcs.hpp>
    #include <ValEdit.hpp>
    #include "Unit2.h"
    #include "Unit3.h"
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
            TPageControl *PageControl1;
            TTabSheet *TabSheet1;
            TTabSheet *TabSheet2;
            TTabSheet *TabSheet3;
            TGroupBox *GroupBox1;
            TCheckBox *CheckBox1;
            TCheckBox *CheckBox2;
            TCheckBox *CheckBox3;
            TCheckBox *CheckBox4;
            TComboBox *ComboBox1;
            TComboBox *ComboBox2;
            TComboBox *ComboBox3;
            TComboBox *ComboBox4;
            TMemo *Memo1;
            TGroupBox *GroupBox2;
            TCheckBox *CheckBox5;
            TChart *Chart1;
            TLineSeries *Series1;
            TGroupBox *GroupBox3;
            TEdit *Edit1;
            TEdit *Edit2;
            TButton *Button1;
            TButton *Button2;
            TButton *Button3;
            TButton *Button4;
            TShape *Shape1;
            TValueListEditor *ValueListEditor1;
            TValueListEditor *ValueListEditor2;
            TButton *Button5;
            TButton *Button6;
            void __fastcall Button5Click(TObject *Sender);
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall ComboBox4Change(TObject *Sender);
            void __fastcall ComboBox3Change(TObject *Sender);
            void __fastcall ComboBox2Change(TObject *Sender);
            void __fastcall ComboBox1Change(TObject *Sender);
            void __fastcall Button6Click(TObject *Sender);
            void __fastcall CheckBox5Click(TObject *Sender);
            void __fastcall Button4Click(TObject *Sender);
            void __fastcall Button3Click(TObject *Sender);
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall Button1Click(TObject *Sender);
    private: // User declarations
                     TMyThread1 *thread1;
                     TMyThread1 *thread2;
                     TMyThread2 *thread3;
    public: // User declarations
            __fastcall TForm1(TComponent* Owner);
            bool    fStop;
            bool    halfReady;
            double  y;
            double  ampAlarm1;
            double  ampAlarm2;
            double  count;
            FILE    *svfile;
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    这个是UNIT2。H的内容//---------------------------------------------------------------------------#ifndef Unit2H
    #define Unit2H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include "Unit3.h"
    #include "Unit1.h" 
    #include <Classes.hpp>
    extern  double i;
    extern  double y;
    extern  FILE    *svfile;
    extern  unsigned char halfReady;
    extern  unsigned char  fstop;
    extern  double ampAlarm1;
    extern  double ampAlarm2;
    //---------------------------------------------------------------------------
    class TMyThread1 : public TThread
    {            
    private:
    protected:
            void __fastcall Execute();
            void __fastcall AlarmSetting();
    public:
            __fastcall TMyThread1(bool CreateSuspended);
    };
    //---------------------------------------------------------------------------
    #endif
     这个是UNIT3。H的内容//---------------------------------------------------------------------------#ifndef Unit3H
    #define Unit3H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    //---------------------------------------------------------------------------
    class TMyThread2 : public TThread
    {            
    private:
    protected:
            void __fastcall Execute();
    public:
            __fastcall TMyThread2(bool CreateSuspended);
    };
    //---------------------------------------------------------------------------
    #endif
     
    一运行就出错  说什么系统什么什么错误
       其实程序满简单的  但是我刚学BCB  编写程基础又不好  请各位指点我一下  高分相送
      

  2.   

    各位高手  有时间联系下我好吗  QQ:122662150   可能线程有错误  但是我不知道怎么用  老师任务安排的比较紧
    一运行就出错:   提示:Project project1.exe raised exception class EosError with message 'system Error '  code :5