Текущий архив: 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