Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] SendMessage, PostMessage, завершение одной процедуры из другой 
:(
    Опции темы
Notreg
Дата 11.1.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Реально ли завершить одну процедуру из другой не повредив, последнюю???, Так как в процедуре, которую следует вырубить выполняется интенсивная  обработка данных в цикле, то принудительное ее остановка может привести к непредсказуемым последствиям!!! Как без палево по тихому отрубить трудолюбивою процедурку???
--------------------
Надежна лишь смерть, жизнь - нет.
PM MAIL   Вверх
_hunter
Дата 11.1.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: нет
Всего: 98



при чем тут SendMessage и PostMessage?
какая процедура находится в какой?
чем не подходит самый стандартный и безопасный метод "опрос флага"?

Цитата(Notreg @  11.1.2007,  11:28 Найти цитируемый пост)
 Как без палево

без чего?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Notreg
Дата 11.1.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



опрос флага помогает если тока использовать крестик в правом верхнем углу, при выполненеие это процедурки другие кнопки не нажимаются
--------------------
Надежна лишь смерть, жизнь - нет.
PM MAIL   Вверх
aktuba
Дата 11.1.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

Репутация: нет
Всего: 38



Самый правильный вариант - в процедуре, которую надо остановить проверять флаг, как и сказал _hunter. Примерно так:

Код

procedure Proc;
var
  i: Integer;
begin
 ...
 for i := 0 to MaxInt do
    begin
      // Очередное вычисление
      Application.ProcessMessages; // для того, чтобы обрабатывались сообщения
      if FStop then Break;
    end;
... 
end;
 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Sunvas
Дата 11.1.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: 7
Всего: 89



Цитата(Notreg @  11.1.2007,  11:28 Найти цитируемый пост)
Реально ли завершить одну процедуру из другой не повредив, последнюю???

Нет, в одном потоке это точно невозможно. Процедура по-сути это команда, которая заключает в себе некую группу других комманд. В определенный момент времени может выполняться только одна команда. А если выполняються только процедурные команды, то к команде "прерывания" процедуры дело просто не дойдет.

Добавлено @ 12:11 
Можно, конечно использовать флаги - это единственный выход.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Notreg
Дата 11.1.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как предотвратить зависание кнопок, application.processmessages; не помогает!!!
--------------------
Надежна лишь смерть, жизнь - нет.
PM MAIL   Вверх
Sunvas
Дата 11.1.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: 7
Всего: 89



Цитата(Notreg @  11.1.2007,  12:14 Найти цитируемый пост)
Как предотвратить зависание кнопок, application.processmessages; не помогает!!!

Что значит, "зависание кнопок"? Покажи код где это не помогает.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
W4FhLF
Дата 11.1.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

Репутация: 1
Всего: 121



Цитата(Sunvas @  11.1.2007,  12:07 Найти цитируемый пост)
 В определенный момент времени может выполняться только одна команда.


К слову, не одна. Суперскалярность, однакоsmile Ну так, я просто уточнил, в целом рассуждения верны.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Sunvas
Дата 11.1.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: 7
Всего: 89



Цитата(W4FhLF @  11.1.2007,  12:20 Найти цитируемый пост)
 Суперскалярность, однако

Это еще что?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
_hunter
Дата 11.1.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: нет
Всего: 98



Цитата(Notreg @  11.1.2007,  12:14 Найти цитируемый пост)
Как предотвратить зависание кнопок, application.processmessages; не помогает!!!

тогда запусти поток (в котором и выполняй ту процедуру)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
W4FhLF
Дата 11.1.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

Репутация: 1
Всего: 121



Цитата(Sunvas @  11.1.2007,  12:24 Найти цитируемый пост)
Это еще что?


Это технология, которая позволяет современным процессорам выполнять несколько команд за один такт.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
aktuba
Дата 11.1.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

Репутация: нет
Всего: 38



Notreg, покажи код. Application.ProcessMessages должен помогать, видимо у тебя циклы в циклах (простите за тафталогию).


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Sunvas
Дата 11.1.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: 7
Всего: 89



Цитата(W4FhLF @  11.1.2007,  12:48 Найти цитируемый пост)
Это технология, которая позволяет современным процессорам выполнять несколько команд за один такт.

Это возможно только для нескольких потоков. Для даной программы в определенный момент времени выполняется только одна команда.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Notreg
Дата 11.1.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В кратце объясните как запустить поток, с примером, пожалуйста!!! Процедура обрабатывет огромную базу данных, под курсором появляется надпись "SQL" , программа на нажатие кнопок не реагирует.
--------------------
Надежна лишь смерть, жизнь - нет.
PM MAIL   Вверх
Sunvas
Дата 11.1.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: 7
Всего: 89



ищи по форуму. Ключевое слово thread


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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