Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2008, 09:33   #1
Var17
Пользователь
 
Регистрация: 13.12.2007
Сообщений: 41
По умолчанию процессы выполнялись сразу, не ставясь в очередь

Как на WinAPI сделать, чтоб процессы для приложения выплнялись сразу, не ставясь в очередь, в обычном Delphi это делается с помощью Application.ProccessMessages.
Var17 вне форума Ответить с цитированием
Старый 03.05.2008, 10:29   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Application.ProcessMessages организует локальную петлю сообщений, он вызывает ProcessMessage до тех пор, пока очередь не окажется пустой.
Код:
procedure TApplication.ProcessMessages;
var
  Msg: TMsg;
begin
  while ProcessMessage(Msg) do {loop};
end;
ProcessMessage отвечает за извлечение и диспетчеризацию сообщения, это выполняют API функции
Код:
function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
  Handled: Boolean;
begin
  Result := False;
  if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
  begin
    Result := True;
    if Msg.Message <> WM_QUIT then
    begin
      Handled := False;
      if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
      if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
        not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
      begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
    end
    else
      FTerminate := True;
  end;
end;
Это код из модуля Forms Delphi, который вы обозвали "обычный".

Последний раз редактировалось _Dmitry; 03.05.2008 в 10:33.
_Dmitry вне форума Ответить с цитированием
Старый 03.05.2008, 12:03   #3
Var17
Пользователь
 
Регистрация: 13.12.2007
Сообщений: 41
По умолчанию

Большое спасибо за подробнейшее разъяснение начинающему программисту , сейчас пытаюсь адаптировать код для своей программы, возникают следующие трудности : компилятор не принимает идентификаторы :FOnMessage, IsHintMsg, IsMDIMsg, IsKeyMsg, IsDlgMsg FTerminate.
Программа использует следующие модули : Windows,Messages,SysUtils,Classes. Не хочу использовать Forms т.к. размер программы резко выростет.
Var17 вне форума Ответить с цитированием
Старый 03.05.2008, 12:57   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Может так:
Код:
procedure ProcessMessages;      
var      
  Msg: TMsg;      
begin      
  while true do      
  begin      
    if not PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then Break;     
    if Msg.Message <> WM_QUIT then      
    begin      
      TranslateMessage(Msg);      
      DispatchMessage(Msg);      
    end;      
  end;      
end;
___________________________________ ______________________________
Поиск пользуем хотябы.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек и очередь. (Delphi) Olgasato Помощь студентам 8 02.04.2010 08:08
Создать очередь из n целых чисел вычисляющая по формуле А=х*х+1; evrey Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2008 20:44
Создать очередь из n целых чисел вычисляющих по формуле А=х*х+1; х=1,2,3..n. evrey Помощь студентам 3 01.06.2008 00:00
Процессы student_63 Win Api 4 13.04.2008 11:46
Очередь, нид хэлп Roman-S Общие вопросы C/C++ 1 15.03.2008 23:40