Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Вниз

прием WM_USER в консоли.   Найти похожие ветки 

 
GanibalLector ©   (2004-05-19 00:45) [0]

Итак,моя программа(консольная) вызывает некоторые ф-ции из DLL.Эти ф-ции весьма длительно выполняются.Соответственно,из DLL я буду посылать сообщения в консоль(а в ней будет индикатор выполнения).Но,к сожалению,не знаю как принимать сообщения в консоли.Подскажите как быть.Заранее СПАСИБО!!!


 
GanibalLector ©   (2004-05-19 15:30) [1]

Удалено модератором
Примечание: Создание пустых сообщений


 
GanibalLector ©   (2004-05-20 00:09) [2]

Удалено модератором


 
default ©   (2004-05-20 00:11) [3]

невидимое окно?


 
GanibalLector ©   (2004-05-20 00:34) [4]

2 default ©  
А зачем???Ведь можно и в консоли...Только я не знаю как,млин!


 
Style ©   (2004-05-20 08:37) [5]

Может сделать свой обработчик сообщений?
PeekMessage?


 
Digitman ©   (2004-05-20 09:03) [6]


> Эти ф-ции весьма длительно выполняются


> а в ней будет индикатор выполнения


а что мешает из DLL, в которой крутится некий длит.цикл, при каждой итерации вызывать WriteLn() ?

или тебе при этом нужно реагировать на интерактивные события польз.воода, т.е. одновременно "висеть" на readll() ? тогда для начала организуй в ДЛЛ доп.код.поток


 
GanibalLector ©   (2004-05-20 19:18) [7]

2 Digitman ©   (20.05.04 09:03) [6]
Спасибо Digitman,выручил.Я даже и предположить не мог,что writeln или WriteConsolе можно вызывать из ДЛЛ.


 
vertal ©   (2004-05-21 02:03) [8]

Я предлагаю делать проще:так как dll как я понял твоя , то свою очень_длительно_выполняющуюся _функцию дополнительно снабди 2 параметрами:

Function Very_SLow(...,PCurrentReady:PCardinal;PUserBreak:PBoolean=Nil):SomeType;
Var
 UserBreak:Boolean;
...
Begin
 if (PUserBreak=Nil)then Begin PUserBreak:=@UserBreak;UserBreak:=False;End;
...
 while( (...)and not PUserBreak^)do
    ...
    Inc(PCurrentReady^);
  ...
end;

В самой функции в качетсве счетчика прогресса используй не локальную переменную , а PCurrentReady^;
А в программе можно создать отдельный поток с таймером , котрорый скажем каждую секунду будет писать
 writeln("Ready:",(PCurrentReady^/PTotal^*100):2:2,"%");
Или просто из dll вызывать CallBack функцию для индикации прогресса
Вот как делал я:

...
CurrentPercent:Cardinal=0;
Len_Input:Cardinal;

Procedure MyTimerProc(MyHWND:hwnd;Msg:UINT;idEvent:UINT;dwTime:DWORD);stdcall;
Begin
 writeln("Ready:",((CurrentPercent/Len_Input)*100):2:2,"%");
End;

fUNCTION ThreadFunc(Const lpTHreadParams:Pointer):DWORD ;STDCALL;
Const
 TimerInterval_msec:Cardinal=1000;
Var
 MyMsg:TMsg;
 TimerID:Cardinal;
Begin
  TimerID:=SetTimer(0,0,TimerInterval_msec,@MyTimerProc);
  if TimerID<>0 then while GetMessage(MyMsg,0,0,0) do DispatchMessage(MyMsg);
  if TimerID<>0 then
  Begin
    MyTimerProc(0,0,0,0);
    KillTimer(0,TimerID);
  End;
  Result:=0;
End;
Var
 hThread:THandle;
 ThreadID:Cardinal;
Begin
 ...
hThread:=CreateThread(Nil,0,@ThreadFunc,Nil,0,ThreadID);
  My_Slow_Proc(...,@CurrentPercent,Nil);
  while not PostThreadMessage(ThreadID,WM_QUIT,0,0) do sleep(0);
  WaitForSingleObject(hThread,INFINITE);
  CloseHandle(hThread);
 ...
End.

ЗЫ
Код проверялся только в Win98



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.036 c
3-1085910917
ertong
2004-05-30 13:55
2004.06.27
Изменение размеров колонки в DBGrid


4-1085052879
ekap
2004-05-20 15:34
2004.06.27
Как выдернуть информацию из другой программы..?


10-1013431792
comwad
2002-02-11 15:14
2004.06.27
Corba ест память!!!


3-1085940173
Valera
2004-05-30 22:02
2004.06.27
БД подключение справочника


11-1075358808
Ajax
2004-01-29 09:46
2004.06.27
Edit+выпадающий список





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский