多线程任务,执行过程中,线程挂起,过段时间后进程死掉
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;}