![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
Есть функция соединения с сервером - Connect
Есть некоторая функция, которая ее вызывает- LogIn Но функция соединения с сервером создает отдельный поток и возвращает то, что она соединилась вызовом OnStatusChange Каким образом мне вызвать Connect и продолжить выполнять LogIn только после того, как OnStatusChange вернет добро? OnStatusChange у меня устанавливает перменную connected в true и делает прочие полезные действия. Единственная идея, которая у меня была - разбить LogIn на две части и добавить в OnStatusChange вызов второй части функции. Но тогда, как быть, если Connect вызывается не из LogIn? ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
перенести функцию из доп.потока в основной поток...
Это сообщение отредактировал(а) MetalFan - 9.5.2007, 18:55 -------------------- There are always someone smarter than you... |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
если функция писана тобой и её можно изменить, то можно реализовать синхронизацию при помощи механизма семафоров
Если же функция передана не тобой, то, возможно, там есть какой-то флаг вроде "synchronized" типа boolean, что позволит подключаться не в отдельном потоке, а "нормально". Т.е. дожидаясь окончания выполнения... |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
если функция Connect - возвращает результат соединения (true / false)
то вот так можно:
-------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
т.е. у тебя код создает и создает новые потоки... а так как код выполняется в отдельном потоке(смотри первый пост), то если функция connect и возвращает булевский результат, то как признак (не)успешного запуска дополнительного потока, но никак не сигнал о результате подключения... |
|||
|
||||
WolfON |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
проблема не в том, что я не догадаюсь этого сделать, а в том, чтобы дождаться выполнения потока
Аццко грузит процессор, тем более забивает все остальные потоки, если не делать Application.ProcessMessages; Попробовал сделать семафорами:
Но на выводе имею все-равно 2, потом 1. |
||||||
|
|||||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
WolfON, а что ты хотел? ждать то чего собрался, если семафор еще не создан?
сначала создай (только не так...), а потом жди... а в OnConnect и вообще, в данном случае хватило бы события(CreateEvent), а не семафора. тем более он совершенно неправильно используется з.ы. а вообще, боланд уже реализовали классы-обертки для Event и CriticalSection. находятся они в SyncObjs Это сообщение отредактировал(а) MetalFan - 11.5.2007, 08:14 -------------------- There are always someone smarter than you... |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Просто крути Application.ProcessMessages, пока tcp.Connected не станет true.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |