![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Thread и ассемблер
Dima © (2004-11-17 14:02:00)Вопрос такой :
Есть код на ассемблере и его нужно запустить в отдельном потоке. Но поток почему-то не работает ( т.е. не запускается). Хотя в основном потоке код работает нормально. Может кто сталкивался с такой проблемой. Могу скинуть код потока.
Dima (2004-11-17 14:30:00) [1]ОК. Попробую...
Digitman (2004-11-17 14:25:00) [2]
> Dima (17.11.04 14:21) [6]
> 1. XP
т.е. якобы не отрабатывает call Windows.Beep ?
> 2. Предположение...
это - гадание на кофейной гуще
> 3. Ощущаю
опять же - гадание.
в Делфи есть встр.отладчик.
установи брейкпойнт на первом же операторе в теле поточной ф-ции, поймай брейкпойнт и убедись, что ф-ция стартует и получает управление
Dima (2004-11-17 14:21:00) [3]Digitman :
1. XP
2. Предположение...
3. Ощущаю :)
Может он запускается, но ведь молчит зараза :)
Dima (2004-11-17 14:18:00) [4]Fay : вряд-ли... я уже экспериментировал там.. по всякому.. грабли не там :(
Digitman (2004-11-17 14:17:00) [5]все ясно.
3 вопроса к тебе :
1. ОС, под которой вся эта петрушка тобой запускается ?
2. С чего ты взял, что трэд-ф-ция "не запускается" ?
3. Ощущаешь ли разницу между "не запускается" и "запускается, но делает черт те что, но только не то что я ожидал" ?
Fay (2004-11-17 14:14:00) [6]М.б.
for n1 := 0 to 20 do
begin
start1:=n1+200;
sound(start1,100);
end;
?
Dima (2004-11-17 14:11:00) [7]unit Unit6;
interface
uses
Classes;
type
demo = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
procedure Sound(Frequency, Duration: Integer);
end;
implementation
uses Unit4;
procedure demo.Execute;
var
start1,n1: word;
begin
for n1:= 0 to 20 do
start1:=n1+200;
sound(start1,100);
end;
procedure demo.Sound(Frequency, Duration: Integer);
asm
cmp Win32Platform, VER_PLATFORM_WIN32_NT
jne @@9X
push edx
push eax
call Windows.Beep
ret
@@9X:
push ebx
push edx
mov bx, ax
mov ax, 34DDh
mov dx, 0012h
cmp dx, bx
jnc @@2
div bx
mov bx, ax
in al, 61h
test al, 3
jnz @@1
or al, 3
out 61h, al
mov al, 0B6h
out 43h, al
@@1:
mov al, bl
out 42h, al
mov al, bh
out 42h, al
call Windows.Sleep
in al, 61h
and al, 0FCh
out 61h, al
jmp @@3
@@2:
pop edx
@@3:
pop ebx
end; }
end.
Digitman (2004-11-17 14:06:00) [8]
> Могу скинуть код потока
приводи ПОЛНЫЙ код поточной ф-ции и пример ее старта