标签: interrupt

如何中断等待的C++ 0x线程?

我正在考虑在我的应用程序中使用C++ 0x线程而不是Boost线程.但是,我不确定如何重新实现我对标准C++ 0x线程的重新实现,因为它们似乎没有interrupt()方法.

我目前的设置是:

  • 管理工作的主线程;
  • 几个执行主命令的工作线程.

工人wait()至少要求两个不同的条件变量.师父有一个"超时"状态:在这种情况下,它告诉所有工人停下来并给出他们当时获得的任何结果.使用Boost线程master只是interrupt_all()在线程组上使用,这导致worker停止等待.如果他们现在没有等待,主人还会设置一个bool工人定期检查的标志.

但是,在C++ 0x中,std::thread我没有看到任何替代品interrupt().我错过了什么吗?如果没有,我如何实施上述计划,以便工人不能永远睡觉?

c++ multithreading interrupt c++11

9
推荐指数
1
解决办法
7093
查看次数

帮助在NASM NAS for Assembly中编写TSR程序

我一直在尝试在程序集(16位)中为MS-DOS编写TSR(Terminate-Stay-Resident)程序(一般).我已经阅读了TSR上的维基百科页面以及在DOS中专门使用它的页面(但它似乎是用C语言教学,而不是直接用汇编语言).我查看了一个包含大量DOS中断文档的站点,找到了这个,这个,以及另一个与TSR程序最相关的站点.我无法发布所有链接,因为作为新用户,我在帖子上最多可以有2个超链接.

所以,我尝试在NASM中以实模式平面模型(.COM文件格式)编写(看似)非常简单的TSR程序.这是代码:

[BITS 16]
[ORG 0x0100]

[SECTION .text]

Start:
; Get current interrupt handler for INT 21h
mov AX,3521h                ; DOS function 35h GET INTERRUPT VECTOR for interrupt 21h
int 21h                     ; Call DOS  (Current interrupt handler returned in ES:BX)

mov WORD [v21HandlerSegment],ES     ; Store the current INT 21h handler segment
mov WORD [v21HandlerOffset],BX      ; Store the current INT 21h handler offset

; Write new interrupt handler for INT 21h
mov AX,2521h                ; DOS function 25h …
Run Code Online (Sandbox Code Playgroud)

assembly dos interrupt nasm tsr

9
推荐指数
1
解决办法
4249
查看次数

IO-APIC-fasteoi和IO-APIC-edge之间的区别

在/ proc/interrupts中,我可以看到一些中断号属于IO-APIC-fasteoi,有些属于IO-APIC-edge.

两种类型的中断控制器有什么区别?

interrupt

9
推荐指数
1
解决办法
8877
查看次数

有没有使用java.nio.*来中断InputStream #read()而不关闭套接字?

您是否知道在InputStream不关闭相关套接字的情况下中断Java读取的方法?

以下是抓取套接字输入流并转换为可中断DataInputStream的当前构造策略:

InputStream interruptibleInputStream = Channels.newInputStream(Channels.newChannel(m_ConnectionData.getSocket().getInputStream()));
DataInputStream myInterruptibleDIS = new DataInputStream(interruptibleInputStream);
Run Code Online (Sandbox Code Playgroud)

这使用了一个ReadableByteChannel提供read(ByteBuffer)支持ClosedByInterruptExceptionthrowable的方法.

问题是,调用线程使一个中断read()的电话DataInputStream的原因底层套接字被关闭.

对于我的上下文,我需要套接字保持打开状态; 该read调用正在等待未来的用户输入,因此我正在使用中断将控制权传递回更高的组件,然后最终read再次返回.

如果有人能够建议使用JDK内置类来实现这一目标,或者可能指出某些信息无法实现,我将非常感激.

我知道还有其他方法可以达到同样的效果,但我很想知道这种方法是否可行.

java sockets nio interrupt

9
推荐指数
1
解决办法
2072
查看次数

我不明白如何使用中断21,AH = 0ah

我的信息来自这里.该作业要求读取不超过20个字符的程序,将这些字符转换为大写,然后将输入打印为大写字母.

我不知道如何从int21/AH = 0ah访问输入.除非我理解上面链接的内容,否则我真的不能问更准确的问题.谁能解释一下?此外,如果这有任何区别,我正在使用TASM.另外,我正在对freedos进行测试.

UPDATE1:

好的,多亏了你的帮助,我相信我理解中断是如何设置和行为的.

设置: 我必须指定一个ds:dx,我希望这个缓冲区存在

我必须将ds:dx设置为20(设置缓冲区可以容纳的最大字符数)

我必须将ds:dx + 1设置为0(我想以某种方式设置要读入的最小字符数)

实际上调用int21/AH = 0ah,它将转到ds:dx并解释预设的字节.它会在等待输入时暂停程序

int21/AH = 0ah将从我的输入填充ds:dx + 2 + n(其中n是输入的字符数,包括'\ r')

我现在的问题是,我该怎么做.我刚刚再次查看了x86汇编语言参考,但还没有找到任何有用的东西.

代码我到目前为止

           assume          cs:code,ds:code
code       segment
start:

           mov  ax,code ;moves code segment into reg AX
           mov  ds,ax   ;makes ds point to code segment

           mov  ah,0ah
           int  21h
           mov  ax,1234h  ;breakpoint

           mov  ah,9
           mov  dx,offset message
           int  21h

endNow:
           ;;;;;;;;;;ends program;;;;;;;;;;
           mov  ah,0  ;terminate program
           int  21h   ;program ends

message    db   'Hello world!!!',13,10,'$'
code       ends
           end …
Run Code Online (Sandbox Code Playgroud)

assembly dos interrupt bios tasm

9
推荐指数
1
解决办法
2万
查看次数

如何了解Java中的中断?

Thread.interrupt中断这样的调用sleep,joinwait.我想知道它是如何实现的.

我知道Thread.interrupt设置一面旗帜isInterrupted.是否wait只是调查这个标志?我希望它没有.所以我的问题是如何wait"了解"中断.

java multithreading interrupt

9
推荐指数
1
解决办法
145
查看次数

什么是重新安排中断(RES)?是什么导致的?如何在Linux内核中处理?

"RES:Rescheduling interrupts"和"LOC:Local timer interrupts"有什么区别?什么责任解​​雇RES中断?LOC是否与处理器中的定时器h/w生成的通用定时器中断相同?

另外,请详细说明在定时器中断和RES中断期间调度器的哪个部分被调用?如何在Linux内核中发生?

提前致谢.

processor timer interrupt scheduler linux-kernel

9
推荐指数
1
解决办法
1万
查看次数

手臂睡眠模式进入和退出差异WFE,WFI

我是ARM架构的新手,我正试图围绕唤醒机制.

首先,我发现很难找到关于此的好消息.ARM的文档似乎非常简洁.

我想要了解的是,当Cortex(尤其是我正在使用的M0)将被唤醒时.

作为参考,我还咨询了以下内容:

WFE指令的文档是:

    3.7.11. WFE
    Wait For Event.
    Syntax
    WFE
    Operation
    If the event register is 0, WFE suspends execution until 
      one of the following events occurs:
    an exception, unless masked by the exception mask registers or the current
      priority level
    an exception enters the Pending state, if SEVONPEND in the 
      System Control Register is set
    a Debug Entry request, if debug is enabled
    an event signaled by a peripheral or another processor in a 
      multiprocessor …
Run Code Online (Sandbox Code Playgroud)

arm interrupt cortex-m

9
推荐指数
1
解决办法
1万
查看次数

在操作系统中,系统调用和中断之间有什么区别?

在操作系统中,系统调用和中断之间有什么区别?所有系统调用都是中断吗?所有中断都是系统调用吗?

operating-system interrupt system-calls

9
推荐指数
2
解决办法
1万
查看次数

`memcpy((void*)dest,src,n)``volatile`数组是否安全?

我有一个用于UART的缓冲区,它以这种方式声明:

union   Eusart_Buff {
    uint8_t     b8[16];
    uint16_t    b9[16];
};

struct  Eusart_Msg {
    uint8_t             msg_posn;
    uint8_t             msg_len;
    union Eusart_Buff   buff;
};

struct  Eusart {
    struct Eusart_Msg   tx;
    struct Eusart_Msg   rx;
};

extern  volatile    struct Eusart   eusart;
Run Code Online (Sandbox Code Playgroud)

这里是填充缓冲区的函数(将使用中断发送):

void    eusart_msg_transmit (uint8_t n, void *msg)
{

    if (!n)
        return;

    /*
     * The end of the previous transmission will reset
     * eusart.tx.msg_len (i.e. ISR is off)
     */
    while (eusart.tx.msg_len)
        ;

    if (data_9b) {
        memcpy((void *)eusart.tx.buff.b9, msg,
                sizeof(eusart.tx.buff.b9[0]) * n);
    } else {
        memcpy((void *)eusart.tx.buff.b8, …
Run Code Online (Sandbox Code Playgroud)

c casting interrupt volatile memcpy

9
推荐指数
1
解决办法
404
查看次数