Subversion Repositories Kolibri OS

Rev

Rev 9995 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9995 Rev 10002
Line 2548... Line 2548...
2548
    к прямоугольной форме.
2548
    к прямоугольной форме.
Line 2549... Line 2549...
2549
 
2549
 
2550
---------------------- Константы для регистров: ----------------------
2550
---------------------- Константы для регистров: ----------------------
2551
  eax - SF_SET_WINDOW_SHAPE (50)
2551
  eax - SF_SET_WINDOW_SHAPE (50)
2552
======================================================================
2552
======================================================================
-
 
2553
===================== Функция 51, подфункция 1 =======================
2553
===================== Функция 51 - создать поток. ====================
2554
========================== Создать поток =============================
2554
======================================================================
2555
======================================================================
2555
Параметры:
2556
Параметры:
2556
  * eax = 51 - номер функции
2557
  * eax = 51 - номер функции
2557
  * ebx = 1 - единственная подфункция
2558
  * ebx = 1 - номер подфункции
2558
  * ecx = адрес точки входа потока (начальный eip)
2559
  * ecx = адрес точки входа потока (начальный eip)
2559
  * edx = указатель стэка потока (начальный esp)
2560
  * edx = указатель стэка потока (начальный esp)
2560
Возвращаемое значение:
2561
Возвращаемое значение:
2561
  * eax = -1 - ошибка (в системе слишком много потоков)
2562
  * eax = -1 - ошибка (в системе слишком много потоков)
Line 2562... Line 2563...
2562
  * иначе eax = TID - идентификатор потока
2563
  * иначе eax = TID - идентификатор потока
2563
 
2564
 
2564
---------------------- Константы для регистров: ----------------------
2565
---------------------- Константы для регистров: ----------------------
-
 
2566
  eax - SF_CREATE_THREAD (51)
-
 
2567
======================================================================
-
 
2568
===================== Функция 51, подфункция 2 =======================
-
 
2569
=================== Получить номер слота потока ======================
-
 
2570
======================================================================
-
 
2571
Параметры:
-
 
2572
  * eax = 51 - номер функции
-
 
2573
  * ebx = 2 - номер подфункции
-
 
2574
Возвращаемое значение:
-
 
2575
  * eax = номер слота потока
-
 
2576
 
-
 
2577
======================================================================
-
 
2578
===================== Функция 51, подфункция 3 =======================
-
 
2579
==================== Получить приоритет потока =======================
-
 
2580
======================================================================
-
 
2581
Параметры:
-
 
2582
  * eax = 51 - номер функции
-
 
2583
  * ebx = 3 - номер подфункции
-
 
2584
  * ecx = номер слота потока или -1 (текущий поток)
-
 
2585
Возвращаемое значение:
-
 
2586
  * eax = -1 - ошибка (неверный номер слота потока или поток завершен)
-
 
2587
  * иначе eax = номер приоритета потока
-
 
2588
Замечания:
-
 
2589
  * Приоритет потока имеет диапазон значений от 0 до 255. 
-
 
2590
  Значение 0 - наивысший приоритет потока, устанавливаемый по умолчанию при создании потока.
-
 
2591
  
-
 
2592
======================================================================
-
 
2593
===================== Функция 51, подфункция 4 =======================
-
 
2594
=================== Установить приоритет потока ======================
-
 
2595
====================================================================== 
-
 
2596
Параметры:
-
 
2597
  * eax = 51 - номер функции
-
 
2598
  * ebx = 4 - номер подфункции
-
 
2599
  * ecx = номер слота потока или -1 (текущий поток)
-
 
2600
  * edx = приоритет потока
-
 
2601
Возвращаемое значение:
-
 
2602
  * eax = -1 - ошибка (неверный номер слота потока или поток завершен)
-
 
2603
  * иначе eax = старое значение приоритета потока
-
 
2604
Замечания:
-
 
2605
  * Приоритет потока имеет диапазон значений от 0 до 255. 
-
 
2606
  Значение 0 - наивысший приоритет потока, устанавливаемый по умолчанию при создании потока.
2565
  eax - SF_CREATE_THREAD (51)
2607
  
2566
======================================================================
2608
======================================================================
2567
====================== Функция 54, подфункция 0 ======================
2609
====================== Функция 54, подфункция 0 ======================
2568
============== Узнать количество слотов в буфере обмена. =============
2610
============== Узнать количество слотов в буфере обмена. =============
2569
======================================================================
2611
======================================================================
Line 3597... Line 3639...
3597
  * После завершения критических действий в обработчике пользователя
3639
  * После завершения критических действий в обработчике пользователя
3598
    восстановление бита маски данного исключения можно сделать
3640
    восстановление бита маски данного исключения можно сделать
3599
    подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя.
3641
    подфункцией 25. Сброс флагов исключений в модулях FPU и XMM также возлагается на обработчик пользователя.
Line 3600... Line 3642...
3600
	
3642
	
3601
Внимание:
3643
Внимание:
-
 
3644
    1) Если пользовательский обработчик обрабатывает исключение переполнения стека (#SS), то должен быть установлен стартовый адрес резервного стека в регистре ESI.
3602
	Если пользовательский обработчик обрабатывает исключение 		переполнения стека (#SS), то должен быть установлен адрес резервного стека в заголовке программы (см. структуру APP_HEADER_01_  taskman.inc).
3645
	При возникновении исключения (#SS), в этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK  sys32.inc).
-
 
3646
	При завершении обработки этого исключения, пользовательский обработчик должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK.
3603
	В этот резервный стек будут записаны дополнительные данные (см. структуру EXCEPT_STACK  sys32.inc).
3647
	
-
 
3648
	2) Вы можете использовать режим "контролируемое исключение" для проверок на корректность адресов памяти при считывании\записи данных. 
-
 
3649
	Для этого:
-
 
3650
    - В регистр ESI заносится адрес, куда должно перейти выполнение кода при возникновении исключения.
Line 3604... Line 3651...
3604
	Пользовательский бработчик,при завершении обработки этого исключения, должен дополнительно обнулить бит занятости (бит номер 0) резервного стека в поле LockAccess структуры EXCEPT_STACK.
3651
	- В регистр EDI заносится сигнатура - текст 'EXPT'.
3605
	
3652
	
3606
 
3653