Главная страница
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.012 c
14-10377
Карлсон
2003-07-17 01:07
2003.08.04
какая из работ Вам нравится больше?


1-10190
Санек
2003-07-22 12:28
2003.08.04
ToolBox


6-10344
MetalFan
2003-05-28 13:43
2003.08.04
TPowersock


1-10192
Альф
2003-07-17 16:11
2003.08.04
Можно ли из множества целых составить строку ?


14-10395
Igorek
2003-07-14 12:27
2003.08.04
Мы наконец-то открыли сайт - www.siriussoft.com