专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++ Builder

多线程任务,执行过程中,线程挂起,过段时间后进程死掉解决方案

发布时间:2011-06-28 13:40:46 文章来源:www.iduyao.cn 采编人员:星星草
多线程任务,执行过程中,线程挂起,过段时间后进程死掉
C/C++ code

class TBindFWD
{
    private:
    char CHANNELID[ROWCOUNT][5];
    char RATECODE[ROWCOUNT][5];
    char FEEDID[ROWCOUNT][5];
    char FEEDBID[ROWCOUNT][15];
    char FEEDASK[ROWCOUNT][15];
    char FEEDMID[ROWCOUNT][15];
    char VALIDFEEDBID[ROWCOUNT][15];
    char VALIDFEEDASK[ROWCOUNT][15];
    char VALIDFEEDMID[ROWCOUNT][15];
    char BIDDELTA[ROWCOUNT][15];
    char ASKDELTA[ROWCOUNT][15];
    char QUOTEBID[ROWCOUNT][15];
    char QUOTEASK[ROWCOUNT][15];
    char QUOTEMID[ROWCOUNT][15];
    char VALIDQUOTEBID[ROWCOUNT][15];
    char VALIDQUOTEASK[ROWCOUNT][15];
    char VALIDQUOTEMID[ROWCOUNT][15];
    char BIDVOLUME[ROWCOUNT][19];
    char ASKVOLUME[ROWCOUNT][19];
    char TRADEMARK[ROWCOUNT][2];
    char RUNSTATE[ROWCOUNT][2];
    char VALUEDATE[ROWCOUNT][9];
    char QUOTEBASIS[ROWCOUNT][15];
    char QUOTEHIGH[ROWCOUNT][15];
    char QUOTELOW[ROWCOUNT][15];
    char QUOTEOPEN[ROWCOUNT][15];
    char QUOTECLOSE[ROWCOUNT][15];
    char REFRESHCOUNT[ROWCOUNT][9];
    //char REFRESHTIME[ROWCOUNT][19];
    char TERMID[ROWCOUNT][5]; //
    char SPOTBID[ROWCOUNT][15]; //
    char SPOTASK[ROWCOUNT][15]; //
    char SPOTMID[ROWCOUNT][15]; //
    char MATURITYDATE[ROWCOUNT][9]; //
    char CALCBID[ROWCOUNT][15]; //
    char CALCASK[ROWCOUNT][15]; //

    std::string sql;
    sql::TBindDefine * bd;
    int _rowcount;
    std::map<string, void *> bdmap;
    pricepub::TPriceFPQuoteItem item;

    //std::string datetimestr;

    public:
    TBindFWD(std::string bdsql);
    TBindFWD();
    ~TBindFWD(){delete bd;};

    int GetRowcount() { return _rowcount;};
    std::string GetSQL() { return sql;};
    sql::TBindDefine * GetBindDefine() { return bd;};
    void AddItem(pricepub::TPriceFPQuoteItem item1);
};
//---------------------------------------
TBindFWD::TBindFWD(std::string bdsql)
{
    int fieldcount, pos;
    fieldcount = 0;
    pos = 0;
    while (1)
    {
        pos = bdsql.find(":bind_", pos);
        if (pos == std::string::npos)
            break;
        pos = pos + 6;
        fieldcount ++;
    }
    //fieldcount --;
    //std::cout << "FWD:fieldcount = " << fieldcount << std::endl;
    bd = new sql::TBindDefine (fieldcount);

    do {
        int pos1, pos2;
        pos1 = bdsql.find(":bind_");
        if (pos1 == std::string::npos)
            break;
        pos2 = bdsql.find(' ', pos1+6);
        if (pos2 == std::string::npos)
        {
            std::cout << "Error in SQL!" << std::endl;
            lang::mstring mstr;
            mstr << "Error in SQL!";
            throw lang::Exception(mstr.str());;
        }

        do
        {
            char c = bdsql[pos2-1];
            if (isalpha(c))
                break;
            else
                pos2 = pos2 - 1;
        } while (1);

        std::string field = bdsql.substr(pos1+6, pos2-pos1-6);
        field = lang::TCharSet::Upper(field);

        if (!strcmp(field.c_str(), "CHANNELID"))
        {
            bd->AddField((char *)CHANNELID, 5);
            bdmap["CHANNELID"] = (void *)(&(item.ChannelID));
            
        }
          else if (!strcmp(field.c_str(), "RATECODE"))
          {
              bd->AddField((char *)RATECODE, 5);
              bdmap["RATECODE"] = (void *)(&(item.RateCode));
            
          }
          else if (!strcmp(field.c_str(), "FEEDID"))
          {
              bd->AddField((char *)FEEDID, 5);
              bdmap["FEEDID"] = (void *)(&(item.FeedID));
            
          }
        else if (!strcmp(field.c_str(), "FEEDBID"))
          {
              bd->AddField((char *)FEEDBID, 15);
              bdmap["FEEDBID"] = (void *)(&(item.FeedBid));
            
          }
        else if (!strcmp(field.c_str(), "FEEDASK"))
          {
              bd->AddField((char *)FEEDASK, 15);
              bdmap["FEEDASK"] = (void *)(&(item.FeedAsk));
            
          }
        else if (!strcmp(field.c_str(), "FEEDMID"))
          {
              bd->AddField((char *)FEEDMID, 15);
              bdmap["FEEDMID"] = (void *)(&(item.FeedMid));
            
          }
        else if (!strcmp(field.c_str(), "VALIDFEEDBID"))
          {
              bd->AddField((char *)VALIDFEEDBID, 15);
              bdmap["VALIDFEEDBID"] = (void *)(&(item.ValidFeedBid));
            
          }
        else if (!strcmp(field.c_str(), "VALIDFEEDASK"))
          {
              bd->AddField((char *)VALIDFEEDASK, 15);
              bdmap["VALIDFEEDASK"] = (void *)(&(item.ValidFeedAsk));
            
          }
        else if (!strcmp(field.c_str(), "VALIDFEEDMID"))
          {
              bd->AddField((char *)VALIDFEEDMID, 15);
              bdmap["VALIDFEEDMID"] = (void *)(&(item.ValidFeedMid));

          }
        else if (!strcmp(field.c_str(), "BIDDELTA"))
          {
              bd->AddField((char *)BIDDELTA, 15);
              bdmap["BIDDELTA"] = (void *)(&(item.BidDelta));
            
          }
        else if (!strcmp(field.c_str(), "ASKDELTA"))
          {
              bd->AddField((char *)ASKDELTA, 15);
              bdmap["ASKDELTA"] = (void *)(&(item.AskDelta));

          }
        else if (!strcmp(field.c_str(), "QUOTEBID"))
          {
              bd->AddField((char *)QUOTEBID, 15);
              bdmap["QUOTEBID"] = (void *)(&(item.QuoteBid));

          }
        else if (!strcmp(field.c_str(), "QUOTEASK"))
          {
              bd->AddField((char *)QUOTEASK, 15);
              bdmap["QUOTEASK"] = (void *)(&(item.QuoteAsk));

          }
        else if (!strcmp(field.c_str(), "QUOTEMID"))
          {
              bd->AddField((char *)QUOTEMID, 15);
              bdmap["QUOTEMID"] = (void *)(&(item.QuoteMid));

          }
        else if (!strcmp(field.c_str(), "VALIDQUOTEBID"))
          {
              bd->AddField((char *)VALIDQUOTEBID, 15);
              bdmap["VALIDQUOTEBID"] = (void *)(&(item.ValidQuoteBid));

          }
        else if (!strcmp(field.c_str(), "VALIDQUOTEASK"))
          {
              bd->AddField((char *)VALIDQUOTEASK, 15);
              bdmap["VALIDQUOTEASK"] = (void *)(&(item.ValidQuoteAsk));

          }
        else if (!strcmp(field.c_str(), "VALIDQUOTEMID"))
          {
              bd->AddField((char *)VALIDQUOTEMID, 15);
              bdmap["VALIDQUOTEMID"] = (void *)(&(item.ValidQuoteMid));

          }
        else if (!strcmp(field.c_str(), "BIDVOLUME"))
          {
              bd->AddField((char *)BIDVOLUME, 19);
              bdmap["BIDVOLUME"] = (void *)(&(item.BidVolume));

          }
        else if (!strcmp(field.c_str(), "ASKVOLUME"))
          {
              bd->AddField((char *)ASKVOLUME, 19);
              bdmap["ASKVOLUME"] = (void *)(&(item.AskVolume));
            
          }
        else if (!strcmp(field.c_str(), "TRADEMARK"))
          {
              bd->AddField((char *)TRADEMARK, 2);
              bdmap["TRADEMARK"] = (void *)(&(item.TradeMark));

          }
        else if (!strcmp(field.c_str(), "RUNSTATE"))
          {
              bd->AddField((char *)RUNSTATE, 2);
              bdmap["RUNSTATE"] = (void *)(&(item.RunState));
            
          }
        else if (!strcmp(field.c_str(), "VALUEDATE"))
          {
              bd->AddField((char *)VALUEDATE, 9);
              bdmap["VALUEDATE"] = (void *)(&(item.ValueDate));
            
          }
        else if (!strcmp(field.c_str(), "QUOTEBASIS"))
          {
              bd->AddField((char *)QUOTEBASIS, 15);
              bdmap["QUOTEBASIS"] = (void *)(&(item.QuoteBasis));
            
          }
        else if (!strcmp(field.c_str(), "QUOTEHIGH"))
          {
              bd->AddField((char *)QUOTEHIGH, 15);
              bdmap["QUOTEHIGH"] = (void *)(&(item.QuoteHigh));
            
          }
        else if (!strcmp(field.c_str(), "QUOTELOW"))
          {
              bd->AddField((char *)QUOTELOW, 15);
              bdmap["QUOTELOW"] = (void *)(&(item.QuoteLow));
            
          }
        else if (!strcmp(field.c_str(), "QUOTEOPEN"))
          {
              bd->AddField((char *)QUOTEOPEN, 15);
              bdmap["QUOTEOPEN"] = (void *)(&(item.QuoteOpen));
            
          }
        else if (!strcmp(field.c_str(), "QUOTECLOSE"))
          {
              bd->AddField((char *)QUOTECLOSE, 15);
              bdmap["QUOTECLOSE"] = (void *)(&(item.QuoteClose));
            
          }
        else if (!strcmp(field.c_str(), "REFRESHCOUNT"))
          {
              bd->AddField((char *)REFRESHCOUNT, 9);
              bdmap["REFRESHCOUNT"] = (void *)(&(item.UpdateCount));
            
          }
        /*
        else if (!strcmp(field.c_str(), "REFRESHTIME"))
          {
              bd->AddField((char *)REFRESHTIME, 19);
              bdmap["REFRESHTIME"] = (void *)(&datetimestr);

          } */
        else if (!strcmp(field.c_str(), "TERMID"))
        {
              bd->AddField((char *)TERMID, 5);
              bdmap["TERMID"] = (void *)(&(item.TermID));
          }
        else if (!strcmp(field.c_str(), "SPOTBID"))
        {
              bd->AddField((char *)SPOTBID, 15);
              bdmap["SPOTBID"] = (void *)(&(item.SpotBid));
          }
        else if (!strcmp(field.c_str(), "SPOTASK"))
        {
              bd->AddField((char *)SPOTASK, 15);
              bdmap["SPOTASK"] = (void *)(&(item.SpotAsk));
          }
        else if (!strcmp(field.c_str(), "SPOTMID"))
        {
              bd->AddField((char *)SPOTMID, 15);
              bdmap["SPOTMID"] = (void *)(&(item.SpotMid));
          }
        else if (!strcmp(field.c_str(), "MATURITYDATE"))
        {
              bd->AddField((char *)MATURITYDATE, 9);
              bdmap["MATURITYDATE"] = (void *)(&(item.MaturityDate));
          }
          else
          {
            std::cout << "Error Field!" << std::endl;
            /*
            lang::mstring mstr;
            mstr << "Error Field!";
            throw lang::Exception(mstr.str()); */
        }

        bdsql = bdsql.erase(pos1, 6);

      } while (1);

    sql = bdsql;
      _rowcount = 0;
}

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: