用thread方式寄信...會停住 |
尚未結案
|
show
初階會員 發表:57 回覆:48 積分:31 註冊:2003-05-24 發送簡訊給我 |
下面我是用thread方式去寄,寄信方式是查詢MX資訊,直接寄到對方mail server
透過Button3Click先產生21組收件人在listview
再用一個timer每秒檢查listview是否還有收件人,如果有就new thread
每寄出一封信,就砍掉listview一筆名單
可是我發現有時候timer還有持續在跑,但明明listview還有名單
他也不繼續寄...整個程式都很正常沒卡住
但有時候又很正常...可以把整份listview全部寄完... 第一次使用thread....不太熟我寫的對不對
麻煩各位幫我看看....
void __fastcall TForm1::Button3Click(TObject *Sender) //這裡產生收件者 { TListItem *data; for(int i=0;i<=20;i ) { data=Form1->suiListView1->Items->Add(); data->Caption="show@test.com"; data->SubItems->Add(IntToStr(i)); } } //----------------------------------------------- //--------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { //timer檢查listview是否還有收件者 if(Form1->suiListView1->Items->Count>=1) MyThread = new TMyThread(); } //---------------------------------------------------------- //======================================================= __fastcall TMyThread::TMyThread(void):TThread(true) { FreeOnTerminate=true; Resume(); } //------------------------------------------------------- //------------------------------------------------------- void __fastcall TMyThread::ShowTime(void) { Form1->suiListView1->Items->Item[0]->Delete(); } //======================================================= //------------------------------------------------------------- void __fastcall TMyThread::Execute(void) { FreeOnTerminate=true; TIdMessage *IdMessage1 = new TIdMessage(Form1); TIdSMTP *IdSMTP1 = new TIdSMTP(Form1); TIdDNSResolver *LIdDNSResolver1 = new TIdDNSResolver(Form1); while (!Terminated) { LIdDNSResolver1->Host="168.95.1.1"; LIdDNSResolver1->QueryRecords.operator >>(qtMX); String result,o_info=Form1->suiListView1->Items->Item[0]->Caption; String r_user=Form1->suiListView1->Items->Item[0]->Caption.Delete(Form1->suiListView1->Items->Item[0]->Caption.LastDelimiter("@"),Form1->suiListView1->Items->Item[0]->Caption.Length()); String domain=o_info.Delete(1,o_info.LastDelimiter("@")); IdMessage1->Subject=Form1->suiListView1->Items->Item[0]->SubItems->Strings[0]; TIdEMailAddressItem *NewItem=IdMessage1->Recipients->Add(); NewItem->Address=Form1->suiListView1->Items->Item[0]->Caption; Synchronize(ShowTime); LIdDNSResolver1->Active=true; LIdDNSResolver1->Port=53; LIdDNSResolver1->QueryRecords=TQueryType()< |
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
void __fastcall TMyThread::Execute(void) { FreeOnTerminate=true; TIdMessage *IdMessage1 = new TIdMessage(Form1); TIdSMTP *IdSMTP1 = new TIdSMTP(Form1); TIdDNSResolver *LIdDNSResolver1 = new TIdDNSResolver(Form1); //while (!Terminated)拿掉 //{拿掉 LIdDNSResolver1->Host="168.95.1.1"; LIdDNSResolver1->QueryRecords.operator >>(qtMX); String result,o_info=Form1->suiListView1->Items->Item[0]->Caption; String r_user=Form1->suiListView1->Items->Item[0]->Caption.Delete(Form1->suiListView1->Items->Item[0]->Caption.LastDelimiter("@"),Form1->suiListView1->Items->Item[0]->Caption.Length()); String domain=o_info.Delete(1,o_info.LastDelimiter("@")); IdMessage1->Subject=Form1->suiListView1->Items->Item[0]->SubItems->Strings[0]; TIdEMailAddressItem *NewItem=IdMessage1->Recipients->Add(); NewItem->Address=Form1->suiListView1->Items->Item[0]->Caption; Synchronize(ShowTime); LIdDNSResolver1->Active=true; LIdDNSResolver1->Port=53; LIdDNSResolver1->QueryRecords=TQueryType()<試試看... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |