全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2139
推到 Plurk!
推到 Facebook!

用thread方式寄信...會停住

尚未結案
show
初階會員


發表:57
回覆:48
積分:31
註冊:2003-05-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-26 12:21:28 IP:211.76.xxx.xxx 未訂閱
下面我是用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()<Resolve(domain);
if (LIdDNSResolver1->QueryResult->Items[0]->RecType==qtMX)
   result=dynamic_cast(LIdDNSResolver1->QueryResult->Items[0])->ExchangeServer;
else
    result=domain;
delete LIdDNSResolver1;    IdSMTP1->Host=result;
IdSMTP1->Username=r_user;
IdSMTP1->AuthenticationType=atNone;    IdMessage1->From->Address="test@com.tw";
IdMessage1->UseNowForDate=true;
IdMessage1->Body->Add("test");
try{
   IdSMTP1->Connect();
   IdSMTP1->Send(IdMessage1);
   }
catch(...)
   {       }
IdSMTP1->Disconnect();
delete NewItem;
delete IdMessage1;
delete IdSMTP1;
Sleep(500);
}
}
//-------------------------------------------------------
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-05 00:44:38 IP:61.59.xxx.xxx 未訂閱
 
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()<Resolve(domain);
if (LIdDNSResolver1->QueryResult->Items[0]->RecType==qtMX)
   result=dynamic_cast(LIdDNSResolver1->QueryResult->Items[0])->ExchangeServer;
else
    result=domain;
delete LIdDNSResolver1;    IdSMTP1->Host=result;
IdSMTP1->Username=r_user;
IdSMTP1->AuthenticationType=atNone;    IdMessage1->From->Address="test@com.tw";
IdMessage1->UseNowForDate=true;
IdMessage1->Body->Add("test");
try{
   IdSMTP1->Connect();
   IdSMTP1->Send(IdMessage1);
   }
catch(...)
   {       }
IdSMTP1->Disconnect();
delete NewItem;
delete IdMessage1;
delete IdSMTP1;    Sleep(500);
Terminate();//加上
//}拿掉
}
試試看...
系統時間:2024-05-04 12:41:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!