Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.05.2012
Сообщений: 4

Пример работы с потоками, нужно разобрать!

12.05.2012, 13:43. Показов 3396. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый, помогите разобрать код программы буду очень благодарен
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
.386P
.MODEL FLAT, STDCALL
include pr64_1.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\gdi32.lib
;------------------------------------------------
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
     MSG        MSGSTRUCT <?>
     HINST      DD 0 
     PA         DB "DIAL1",0
     TIM        DB  "Дата  %u/%u/%u  Время  %u:%u:%u",0
     STRCOPY    DB  50   DUP(?)
     DATA       DAT <0>
     HTHR       DD   ?
_DATA ENDS 
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
START: 
     PUSH  0
     CALL  GetModuleHandleA@4
     MOV   [HINST], EAX
;-------------------------------------
     PUSH  0
     PUSH  OFFSET WNDPROC
     PUSH  0
     PUSH  OFFSET PA
     PUSH  [HINST] 
     CALL  DialogBoxParamA@20 
     CMP   EAX,-1 
     JNE   KOL 
KOL:
;-------------------------------------
     PUSH  0
     CALL  ExitProcess@4
;-------------------------------------
;-------------------------------------
WNDPROC PROC
        PUSH EBP
        MOV  EBP, ESP
        PUSH EBX
        PUSH ESI
        PUSH EDI
;-------------------------------------
        CMP  DWORD PTR [EBP+0CH],WM_CLOSE
        JNE  L1
L3: 
        PUSH 0
        PUSH HTHR
        CALL TerminateThread@8 
        PUSH 0
        PUSH DWORD PTR [EBP+08H]
        CALL EndDialog@8
        JMP  FINISH 
L1:
        CMP  DWORD PTR [EBP+0CH],WM_INITDIALOG
        JNE  L2
        PUSH 1
        PUSH DWORD PTR [EBP+08H]
        CALL GetDlgItem@8 
        PUSH OFFSET HTHR  
        PUSH 0
        PUSH EAX     
        PUSH OFFSET GETTIME 
        PUSH 0
        PUSH 0
        CALL CreateThread@24 
        JMP  FINISH 
L2:
        CMP  DWORD PTR [EBP+0CH],WM_COMMAND
        JNE  FINISH 
        CMP  WORD PTR [EBP+10H],2
        JE   L3  
FINISH:
        POP  EDI
        POP  ESI
        POP  EBX
        POP  EBP
        MOV  EAX,0
        RET  16
WNDPROC ENDP
;-------------------------------------
GETTIME PROC
        PUSH EBP
        MOV  EBP,ESP 
L0: 
        PUSH 1000
        CALL Sleep@4 
        PUSH OFFSET DATA
        CALL GetLocalTime@4 
        MOVZX EAX,DATA.sec
        PUSH EAX
        MOVZX EAX,DATA.min 
        PUSH EAX
        MOVZX EAX,DATA.hour
        PUSH EAX
        MOVZX EAX,DATA.year
        PUSH EAX
        MOVZX EAX,DATA.month
        PUSH EAX
        MOVZX EAX,DATA.day
        PUSH EAX
        PUSH OFFSET TIM
        PUSH OFFSET STRCOPY
        CALL wsprintfA 
        PUSH OFFSET STRCOPY
        PUSH 0
        PUSH WM_SETTEXT
        PUSH DWORD PTR [EBP+08H]
        CALL SendMessageA@16
        JMP  L0 
        POP  EBP
        RET  4
GETTIME ENDP 
_TEXT   ENDS    
        END START
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2012, 13:43
Ответы с готовыми решениями:

Простой пример работы с потоками
На разных форумах рассматриваются конкретные задачи, в которых нужно использовать поток. Хотелось бы не очень вникая в детали...

Простой пример работы с потоками + ловля исключений
Всем привет! В общем есть следующий код: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Дайте пример работы с потоками, как их запускать и останавливать
Дайте пример работы с потоками, как их запускать и останавливать и делать паузу и возобновлять после паузы

1
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
13.05.2012, 06:54
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
.386P;386 процессор
.MODEL FLAT, STDCALL;плоская модель, порядок запихивания параметров в стек обратный
include pr64_1.inc;подключаем инклюд
    includelib \masm32\lib\user32.lib;подключаем библиотеки
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\gdi32.lib
;------------------------------------------------
_DATA SEGMENT DWORD PUBLIC USE32 'DATA';объявления данных
     MSG        MSGSTRUCT <?>
     HINST      DD 0 
     PA         DB "DIAL1",0
     TIM        DB  "Дата  %u/%u/%u  Время  %u:%u:%u",0
     STRCOPY    DB  50   DUP(?)
     DATA       DAT <0>
     HTHR       DD   ?
_DATA ENDS ;конец данных
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE';сегмент кода
START: ;точка входа
     PUSH  0
     CALL  GetModuleHandleA@4;идентификатор процесса
     MOV   [HINST], EAX;сохраняем
;-------------------------------------
     PUSH  0
     PUSH  OFFSET WNDPROC
     PUSH  0
     PUSH  OFFSET PA
     PUSH  [HINST] 
     CALL  DialogBoxParamA@20 ;создаем диалоговое окно
     CMP   EAX,-1;если в EAX не 1 
     JNE   KOL ;проскакиваем
KOL:
;-------------------------------------
     PUSH  0
     CALL  ExitProcess@4;кончаем процесс
;-------------------------------------
;-------------------------------------
WNDPROC PROC;оконная процедура
        PUSH EBP
        MOV  EBP, ESP
        PUSH EBX
        PUSH ESI
        PUSH EDI;сохранение регистров
;-------------------------------------
        CMP  DWORD PTR [EBP+0CH],WM_CLOSE;если сообщение закрытия
        JNE  L1
L3: 
        PUSH 0
        PUSH HTHR
        CALL TerminateThread@8 ;кончаем поток
        PUSH 0
        PUSH DWORD PTR [EBP+08H]
        CALL EndDialog@8;кончаем окно
        JMP  FINISH ;на конец обработчика
L1:;если закрытие
        CMP  DWORD PTR [EBP+0CH],WM_INITDIALOG;если инициализация диалога
        JNE  L2;если нет, то проскакиваем
        PUSH 1
        PUSH DWORD PTR [EBP+08H]
        CALL GetDlgItem@8 ;получаем элемент, который в параметре
        PUSH OFFSET HTHR  
        PUSH 0
        PUSH EAX     
        PUSH OFFSET GETTIME 
        PUSH 0
        PUSH 0
        CALL CreateThread@24 ;создаем поток
        JMP  FINISH ;на конец
L2:
        CMP  DWORD PTR [EBP+0CH],WM_COMMAND;если комманда
        JNE  FINISH ;если нет, то проскакиваем
        CMP  WORD PTR [EBP+10H],;если элемент 2
        JE   L3  ;то пролетаем
FINISH:;извлекаем регистры из стека
        POP  EDI
        POP  ESI
        POP  EBX
        POP  EBP
        MOV  EAX,0; обнуляем регистр
        RET  16;выкидываем из стека 16 байт параметров
WNDPROC ENDP
;-------------------------------------
GETTIME PROC; потоковая процедура
        PUSH EBP
        MOV  EBP,ESP ;сохраняем стековые регистры
L0: 
        PUSH 1000
        CALL Sleep@4 ;ждем секунду
        PUSH OFFSET DATA
        CALL GetLocalTime@4 ;получаем системное время
        MOVZX EAX,DATA.sec
        PUSH EAX
        MOVZX EAX,DATA.min 
        PUSH EAX
        MOVZX EAX,DATA.hour
        PUSH EAX
        MOVZX EAX,DATA.year
        PUSH EAX
        MOVZX EAX,DATA.month
        PUSH EAX
        MOVZX EAX,DATA.day;распихиваем в памяти
        PUSH EAX
        PUSH OFFSET TIM
        PUSH OFFSET STRCOPY
        CALL wsprintfA ;выводим по шаблону
        PUSH OFFSET STRCOPY
        PUSH 0
        PUSH WM_SETTEXT
        PUSH DWORD PTR [EBP+08H]
        CALL SendMessageA@16;выводим сообщение
        JMP  L0 
        POP  EBP;достаем стековый указатель
        RET  4;выкидываем 4 байта
GETTIME ENDP ;конец процедуры
_TEXT   ENDS    ;конец сегмента кода
        END START;конец программы
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2012, 06:54
Помогаю со студенческими работами здесь

Работа с потоками. Нужен простой пример
Всем привет! Есть следующий код: using System; using System.Threading; class ThreadTest { static void Main() { ...

Разобрать пример с Random
господа программисты! разъясните ка что тут происходит?? я не въезжаю... рандом от минус бесконечности и до плюс?? data =...

Разобрать пример кода C#
Здравствуйте дорогие форумчане! С Рождеством Христовым Вас всех! И с Новым годом! Гармонии Вам и Вашему дому, и счастья в новом году! ...

Разобрать пример анимации
{Данная программа иллюстрирует применение процедур LockDrawing и Redraw для реализации анимации без мерцания} uses GraphABC; //...

Разобрать пример наследования
Вопрос по наследованию: допустип есть базовый класс А; есть производный от класса А класс Б; и производный от класса Б класс С . ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru