Главная страница
    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.46 MB
Время: 0.031 c
8-1081841509
Max003
2004-04-13 11:31
2004.06.27
Как узнать установлен-ли FLASH player для веб броузера?


6-1083794068
saNat
2004-05-06 01:54
2004.06.27
Outlook Express


14-1085475728
McSimm
2004-05-25 13:02
2004.06.27
DOS атака.


14-1086598998
BiN
2004-06-07 13:03
2004.06.27
Случайно никто квартиру не сдает?


3-1085963746
vasves
2004-05-31 04:35
2004.06.27
Удалены индексные файлы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский