Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Соединиться к POP3 серверу, одновременно по нескольким портам 
V
    Опции темы
Alca
Дата 14.5.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



На форме три TNMPOP3, три таймера, три кнопки:
Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) {}
//---------------------------------------------------------------------------
__fastcall TfrmMain::~TfrmMain() {}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Button1Click(TObject *Sender) {
    Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Button2Click(TObject *Sender) {
    Timer2->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Button3Click(TObject *Sender) {
    Timer3->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Timer1Timer(TObject *Sender) {
    Timer1->Enabled = false;          

    try  {
        NMPOP_1->Connect();
        MessageBox(0, "Connect", "", MB_OK);
    } catch (...) {

    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Timer2Timer(TObject *Sender) {
    Timer2->Enabled = false;     

    try {
        NMPOP_2->Connect();
        MessageBox(0, "Connect", "", MB_OK);
    } catch (...) {

    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Timer3Timer(TObject *Sender) {
    Timer3->Enabled = false;     

    try  {
        NMPOP_3->Connect();
        MessageBox(0, "Connect", "", MB_OK);
    } catch (...) {

    }     
}
//---------------------------------------------------------------------------

Жму 3 кнопки - создаются 3 потока, но конекшн идёт только по одному порту.
Если запустить 2 экземпляра проги, то конекшн устанавливается по двум портам,
т.е. сколько экзепляров столько и открываються портов (локальных).
Хочу чтоб с проги можно было коннектиться с серверу по нескольким портам.  smile 

Это сообщение отредактировал(а) Alca - 14.5.2008, 15:16


--------------------
PM WWW ICQ Skype Jabber   Вверх
Gradov
Дата 14.5.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.10.2006

Репутация: 2
Всего: 3



Цитата(Alca @  14.5.2008,  15:14 Найти цитируемый пост)
Жму 3 кнопки - создаются 3 потока


Жмешь три кнопки и не создается ни одного потока!

Для того чтобы создать отдельный поток необходимо использовать класс TThread или WinAPI функцию СreateThread. И уже в созданных потоках вызывать NMPOP_x->Connect().

А так у тебя получается только тогда когда ты два экземпляра программы запускаешь, естественно при этом создаются два разных потока.

PM MAIL   Вверх
Alca
Дата 14.5.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Пофиг! Делаю с 3-мя потоками, таже шняга! 
Прога коннектиться только по одному порту...
Код

void __fastcall TThread::vFunc() {
    try  {     
        frmMain->NMPOP3[NT]->Connect();
        MessageBox(0, "коннект", "", MB_OK);
    } catch (...) {

    }
}
//---------------------------------------------------------------------------
void __fastcall TThread::Execute() {
    FreeOnTerminate = true;
    if (Terminated) {
            break;
    }
    Synchronize(vFunc);
    frmMain->NMPOP3[NT]->Disconnect();
}

Надо чтоб в каждом потке создавался свой коннекшн по своему порту:
-------------------------------
| Имя процесса   | Порт |
-------------------------------
| Project1.exe     | 1057 |
| Project1.exe     | 1058 |
| Project1.exe     | 1059 |
-------------------------------    
т.е. кол-во NMPOP3 = кол-во коннекшенов (например прога Flash Get).

Это сообщение отредактировал(а) Alca - 15.5.2008, 09:32


--------------------
PM WWW ICQ Skype Jabber   Вверх
Gradov
Дата 14.5.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.10.2006

Репутация: 2
Всего: 3



У меня компонента TNMPOP3 нет - он старый(из Builder 5), поэтому на деле проверить не могу.
Попробуй Indy Library и TIdPOP3 может с ним получится.
PM MAIL   Вверх
Alca
Дата 14.5.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



тоже самое, может кт-то примерчик подкинет?

Это сообщение отредактировал(а) Alca - 15.5.2008, 09:31


--------------------
PM WWW ICQ Skype Jabber   Вверх
Gradov
Дата 15.5.2008, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.10.2006

Репутация: 2
Всего: 3



Не используй метод Synchronize() для вызова функций работы с TNMPOP3, так как он приостанавливает выполнение потока и вызывает функцию в главном VCL-потоке. И у тебя опять получается только один поток!
PM MAIL   Вверх
Alca
Дата 15.5.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Gradov, спасиб! Помогло. +

Это сообщение отредактировал(а) Alca - 15.5.2008, 17:04


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0979 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.