Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

Как сделать так, чтоб использование процессора было не 100%   Найти похожие ветки 

 
xn0bys ©   (2003-06-02 16:29) [0]

Всё в Dll:

Код:
...
procedure Init;
begin
Thread:=CreateThread(nil,0,@ThreadProc,nil,CREATE_SUSPENDED,Dummy);
SetThreadPriority(Thread, THREAD_PRIORITY_IDLE);
end;

Function ThreadProc(Data : Integer) : Integer; StdCall;
Var i,j,k :integer;
Title :Array[0..2047] of Char;
Begin
Result := 0;
Repeat
k:=SendMessage(plugin.hwndParent, WM_USER, 0, WA_IPC_GetPLPOS);
i:=SendMessage(plugin.hwndParent, WM_USER, 0, WA_IPC_GETOUTPUTTIME);
j:=SendMessage(plugin.hwndParent, WM_USER, 0, WA_IPC_ISPLAYING);
if i>0 Then
Begin
WASeek:=i;
WAPosition:=k;
WAStatus:=j;
If CheckSong Then
begin
GetWindowText(plugin.hwndParent, @Title, SizeOf(Title));
WASongName:="";
i:=0;
repeat
WASongName:=WASongName+Title[i];
inc(i);
until (Title[i]<#32) or (i=SizeOf(Title));
i:=Pos(" - Winamp", WASongName);
If i<>0 Then WASongName:=Copy(WASongName, 1, i);
end;
end;
If Enabled Then
If Mode=0 Then
Begin
IFWriteBool("Continue Playing", "Enable Plugin", Enabled);
IFWriteBool("Continue Playing", "Check for Song Name", CheckSong);
IFWriteInteger("Continue Playing", "Mode", Mode);
IFWriteInteger("Continue Playing", "Winamp Status", WAStatus);
IFWriteInteger("Continue Playing", "Playlist Position", WAPosition);
IFWriteInteger("Continue Playing", "Seek of File", WASeek);
If CheckSong Then IFWriteString("Continue Playing", "Last Song Name", WASongName);
end;

Sleep(500);
Until plugQuit;
End;


Заранее секс.


 
Игорь Шевченко ©   (2003-06-02 16:36) [1]


> Заранее секс.


Судя по вопросу - только с программой :))

А такой вопрос - точно ли 100% загрузку дает именно этот поток ? :)


 
xn0bys ©   (2003-06-02 16:39) [2]

У меня других потоков нет,
и мышка дёргается каждые 0,5 сек =>
кто ещё может быть?


 
Игорь Шевченко ©   (2003-06-02 16:43) [3]


> У меня других потоков нет,


Неправда - еще есть основной поток. Он чем занимается ?
Проще сделать небольшой эксперимент - перенести код из подозрительного потока в отдельное приложение, запустить его и посмотреть загрузку процессора :)


 
xn0bys ©   (2003-06-02 16:57) [4]

2 Игорь Шевченко

>> Заранее секс.
>Судя по вопросу - только с программой :))


Тока щас допёрло, чё я написал... :)
Я хотел Заранее сенькс написать, пальцы видимо не попали... :lol:


 
Digitman ©   (2003-06-03 14:27) [5]

мне вот не очень понятно, за каким ... плагин беcконечно посылает сообщения некоему окну с целью получения параметров ? которые наверняка меняются лишь время от времени, а не непрерывно ?

почему все это не организовать асинхронно ?
можно же в поточной ф-ции реализовать цикл ожидания/выборки/диспетчеризации/обработки адресованных потоку сообщений !

все основное время, пока поточная ф-ция находится в состоянии ожидания сообщений (например, GetMessage), она, как ты говоришь, не "использует процессор"

как только хост-процесс, загрузивший плагин и стартовавший код.поток плагина, обнаружит тем или иным образом какие-то изменения каких-то параметров, он посылает некое предопределенное параметрическое сообщение код.потоку плагина (скажем, TM_PLSTATE_CHANGED), тот "просыпается", быстренько "делает свое дело" и снова "засыпает" на GetMessage().
И все это - в цикле
while GetMessage() do
... обработка сообщения

и - никаких слипов ! и - никаких "мышиных тормозов" !




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

Текущий архив: 2003.08.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
6-10321
izx
2003-05-27 18:57
2003.08.04
Подключение из программы на Delphi к web серверу через proxy.


3-10090
levova
2003-07-12 14:56
2003.08.04
SQL запрос


1-10197
Till
2003-07-23 09:40
2003.08.04
Не пойму почему так происходит


3-10105
Ренат
2003-07-14 14:09
2003.08.04
Путь к источнику данных


3-10127
ELKa
2003-07-11 13:59
2003.08.04
Как программно вытянуть отрабатываемый SQL-запрос?