Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 32位或16位组件中的多线程_Multithreading_Assembly_Masm32 - Fatal编程技术网

Multithreading 32位或16位组件中的多线程

Multithreading 32位或16位组件中的多线程,multithreading,assembly,masm32,Multithreading,Assembly,Masm32,我们怎样才能同时完成两项工作 当连续显示某些内容时,程序应在另一侧等待按键事件 我想为我的班级项目开发一个简单的游戏。在C++中,我使用不同的线程来显示输入事件。 我们如何在连续显示某些内容时获得按键值 可以使用中断吗?如果是,那么我们如何使用它整数 我正在使用Masm 32位或16位同步生成中断。这是你用来处理软件产生的中断 如果代码在环0中运行(即内核模式,在16位实模式下正常,但在32位保护模式下不正常),则通过安装中断处理程序来“获取”中断 或者()您可以通过非阻塞int21h或int1

我们怎样才能同时完成两项工作

当连续显示某些内容时,程序应在另一侧等待按键事件

我想为我的班级项目开发一个简单的游戏。在C++中,我使用不同的线程来显示输入事件。 我们如何在连续显示某些内容时获得按键值

可以使用中断吗?如果是,那么我们如何使用它<代码>整数


我正在使用Masm 32位或16位同步生成中断。这是你用来处理软件产生的中断

如果代码在环0中运行(即内核模式,在16位实模式下正常,但在32位保护模式下不正常),则通过安装中断处理程序来“获取”中断

或者()您可以通过非阻塞
int21h
int10h
系统调用,在每个绘图循环中轮询一次按键


在完整的多任务操作系统(例如Windows NT或更高版本,或Linux或OS X,但不是DOS)下运行时,您唯一的选择是要求操作系统(通过使用系统调用)通知您的进程异步事件。这基本上与汇编语言无关,因为您无法直接访问硬件,并且操作系统保持对所有中断处理程序的控制。i、 你可以用C语言中完全相同的方法,对相同的系统调用使用相同的参数。唯一的区别是你推ecx /按ebx/按eax/
调用foo
/
添加esp,12
而不是
foo(a,b,c)

例如,您可以启动另一个线程,让它调用wait For key系统调用(因此它会阻塞),然后设置一个标志(您的主线程偶尔轮询),或者让等待按键的线程实际处理按键本身

您还可以让key wait线程向主线程发送某种信号,这与用户空间中的中断处理程序几乎完全相同。除了信号是纯软件发明之外,操作系统通过让主线程执行它安装的信号处理函数来传递“信号”。(IDK如果Windows有与POSIX信号完全相同的东西,那么假设您使用MASM开发Windows可执行文件,这可能不是中断主线程中无限循环的选项。)

异步I/O的其他方式也是可能的,例如,在绘制每一帧后,使用非阻塞系统调用对按键进行主线程轮询


我不会在这里详细介绍,但你应该可以用谷歌搜索我使用的一些短语,并找到更多。这个问题太笼统,无法给出具体的答案,但这就是操作系统机器如何支持这类事情。

您无法自行安装中断处理程序。只有操作系统可以。然后,您要求操作系统在按下某个键时通知您。您使用的是哪种操作系统?您可以在codereview网站上查看我的答案,了解如何避免简单游戏中使用MT(正如大多数程序员在8/16位机器上使用了20年,因为MT的成本太高,不能被滥用):-然后您可以重用操作系统中的缓冲输入,或者如果您的绘图循环足够快,只需在绘图之间轮询控件就足够了,大多数人类按钮操作的持续时间都超过50毫秒,更接近70-150毫秒,即使您尝试轻轻点击按钮。但是首先选择你的目标操作系统,看看你的可能性有多大