Проблема с MsRdpClient в Потоке

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShkiperLol, 5 Feb 2011.

  1. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Мне нужно организовать работу с MsRdpClient -нтом в нескольких потоках.Но тут такая трабла:
    **************
    unsigned __stdcall Thread1(void*a)
    {
    Form1->MsRdpClient21->Connect();
    WaitForSingleObject(event,INFINITE);
    }

    **************
    _beginthreadex(NULL,NULL,Thread1,NULL,NULL,NULL);
    **************
    Из потока у меня метод Connect не работает,да и остальные тоже.Возможно ли в потоке вызвать этот метод,или нет?В чем может ыбть проблема?
     
  2. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    Могу конечно ошибаться, но мне кажется что проблема у вас в том что вы с потоков обращаетесь к одному компоненту который на форме.

    То есть по логике вы в потоке должны создавать компонент и работать с ним.
     
  3. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    та я тоже так думал,но потестил на других VCL компонентах,их методы нормально вызываються.
     
  4. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    А не из потока метод вызывается нормально?
     
  5. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Да все нормально.
     
  6. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Тогда попробуй сделать наоборот - создать компонент в потоке и вызывать его методы оттуда же. Интересно, так будет работать ли.
     
  7. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    В таком случае нужно указать обработчик для метода OnConnecting,а у него такой прототип

    void (_fastcall * (_closure )(TObject *))(TObject *),это мне борланд выдал.Токо вот как он бдет выглядеть по нормальному?Что за _closure ?
     
  8. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Не знаю, я на цпп не прогаю, но можно ведь просто вставить прототип в описание класса, добавить название метода и нажать Ctrl+Shift+C чтобы сгенерировался скелет реализации, ну а дальше просто перенести код из аналогичного обработчика с класса формы.
    Ах да - и не забыть присвоить обработчик к событию.
     
  9. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Да не,всерано не работает
     
  10. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    а смысл апать?
    Читай документацию, смотри что у тебя именно не так. Но мое мнение всетаки создавай компонент в потоке и к нему обращайся
     
  11. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Если создавать в потоке ,то ексепшн выскакует,даже если просто динамически создать,то тоже ексепшн.
     
  12. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    Я к сожелению на С только читатель , не писатель.
    читай доки смотри что не так.
     
  13. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    unsigned __stdcall Thread(void*a)
    {
    TMsRdpClient2 *MsRdpClient2;
    MsRdpClient2->Destroying();
    MsRdpClient2->Server="201.41.17.145";
    MsRdpClient2->UserName="sgsg";

    }

    [​IMG]

    [​IMG]
     
  14. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Проблема с самой VCL,она не предназначена для работы с потоками.Но дело в том что MsRdpClient ето ведь OCX компонент.
     
  15. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    вотзефак? слишком категоричное заявление - многие компоненты нормально юзаются в потоках