小编Lun*_*oms的帖子

sigwait()和信号处理程序

如果我为SIGABRT设置和信号处理程序,同时我有一个线程在SIGBRT上等待sigwait()(我通过pthread_sigmask在其他线程中有一个阻塞的SIGABRT).

那么首先处理哪一个?信号处理程序或sigwait()?

[我正面临一些问题,sigwait()永远被阻止.我正在调试它]

main()
{
    sigset_t                    signal_set;

    sigemptyset(&signal_set);
    sigaddset(&signal_set, SIGABRT); 
    sigprocmask(SIG_BLOCK, &signal_set, NULL); 

    // Dont deliver SIGABORT while running this thread and it's kids.
    pthread_sigmask(SIG_BLOCK, &signal_set, NULL);

    pthread_create(&tAbortWaitThread, NULL, WaitForAbortThread, NULL);
    ..
    Create all other threads
    ...
}   

static void*    WaitForAbortThread(void* v)
{
    sigset_t signal_set;
    int stat;
    int sig;

    sigfillset( &signal_set);
    pthread_sigmask( SIG_BLOCK, &signal_set, NULL ); // Dont want any signals


    sigemptyset(&signal_set);
    sigaddset(&signal_set, SIGABRT);     // Add only SIGABRT

    // This thread while executing , will handle the SIGABORT signal via …
Run Code Online (Sandbox Code Playgroud)

c linux multithreading signals pthreads

7
推荐指数
2
解决办法
9396
查看次数

我可以将SIGCONT发送到正在运行的进程吗?

我知道SIGCONT继续之前由SIGSTOP停止的进程.没有SIGSTOP,我可以多次使用SIGCONT吗?我,e,以下序列有效吗?

SIGSTOP to process A : The process stops
SIGCONT to process A : Process resumes
SIGCONT to process A : Process already runs - this SIGCONT has no effect 
SIGCONT to process A : Process already runs - this SIGCONT has no effect 
...
SIGSTOP to process A : The process stops
SIGCONT to process A : Process resumes
Run Code Online (Sandbox Code Playgroud)

c linux signals

6
推荐指数
1
解决办法
3763
查看次数

ALSA Api:如何同时播放两个波形文件?

播放两个独立波形文件所需的API配置/调用是什么?我试图这样做,我得到资源忙的错误.一些解决问题的指针将非常有帮助.

以下是snd_pcm_prepare()第二个wavefile 的错误消息

"Device or resource busy"
Run Code Online (Sandbox Code Playgroud)

c linux audio alsa

6
推荐指数
2
解决办法
8152
查看次数

ALSA:防止发言人不足的方法

我正在非交错模式下播放单声道音频.当我将音频数据写入扬声器时,我得到了不足:ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred

我是这样写的:

    printf("%d",snd_pcm_avail (spkhandle));  
    ret = snd_pcm_writen(spkhandle, pSpeakerBuf , framesIn18Millisec);
    if(ret < 0)
    {
        snd_pcm_recover(spkhandle, ret, 0);
    }
Run Code Online (Sandbox Code Playgroud)

有什么不同的方法/参数配置可以防止运行中的ALSA?

(我使用的是Linux 3.0,ARM)

编辑:这是使用snd_pcm_avail()API的缓冲区测量

      snd_pcm_avail = 2304      << snd_pcm_writen call 1 success
      snd_pcm_avail = 2160      << snd_pcm_writen call 2 success
      snd_pcm_avail = 2016      << snd_pcm_writen call 3 success
      snd_pcm_writen error -32 Broken pipe  << snd_pcm_writen call 4 failure
      ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred  << And displays this message
Run Code Online (Sandbox Code Playgroud)

以下是Marko要求的输出:

snd_output_t* out;
....
// Do alsa parameters init …
Run Code Online (Sandbox Code Playgroud)

c linux audio alsa

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

Linux:信号处理程序执行可以被抢占吗?

我遇到了以下信号处理程序代码,它存储 errno 变量,以便它不会影响主线程的 errno 处理。

void myhandler(int signo)
{
    int esaved;
    esaved = errno;
    write(STDOUT_FILENO, "Got a signal\n", 13);
    errno = esaved;
}
Run Code Online (Sandbox Code Playgroud)

但这真的能达到目的吗?如果另一个线程在 write() 之后和恢复 errno 之前检查共享 errno 变量,会发生什么?该线程会由于竞争条件而获得错误的 errno 值吗?

或者信号处理程序相对于线程/进程以原子方式执行,因此一旦信号处理程序执行,内核就不会调度线程,直到信号处理程序完成为止?

换句话说 - 一旦启动,信号处理程序是否会执行而不会被以下情况中断:

 - 1) Scheduler (process/threads),  or  
 - 2) Other signals,  or
 - 3) Hardware interrupt handlers  ?
Run Code Online (Sandbox Code Playgroud)

c linux signals interrupt-handling

5
推荐指数
1
解决办法
5320
查看次数

ALSA:扬声器和麦克风周期大小之间的关系

我有一个带有麦克风和扬声器的音频会议设备。麦克风和扬声器都具有相同的采样率,snd_pcm_hw_params_set_rate_near()比如 8000 Hz。我是否需要将两者的周期大小和周期数设置为相同(两个这样的设备相互通信)?

或者我可以为扬声器选择不同的周期/周期大小而不是为麦克风配置的周期/周期大小吗?我如何决定使用哪个周期和周期大小?

我使用snd_pcm_hw_params_set_period_size_near()snd_pcm_hw_params_set_periods_near()API来设定周期的大小和周期扬声器和麦克风。

(我是 ALSA 的新手)。

c linux alsa

5
推荐指数
1
解决办法
2639
查看次数

ALSA“默认”与“hw:0,0”

设备“默认”与“hw:0,0”之间有什么区别?他们是一样的吗?

(背景:当我配置 hw:0,0 时,我在播放音频时遇到了一些麻烦,但“默认”有效。找不到导致此问题的原因)

谢谢

c linux alsa

5
推荐指数
1
解决办法
1883
查看次数

pthread_create():什么是默认优先级和shceduling策略

惠普手册页(链接)说

"默认情况下,新线程的调度策略和优先级是从创建线程继承的 - 也就是说,默认情况下,pthread_create(3)例程忽略在指定线程属性对象中设置的调度策略和优先级.因此,要创建在调用pthread_create(3)之前,一个受调度策略和优先级设置在指定线程属性对象中的线程,程序必须使用pthread_attr_setinheritsched(3)例程将继承线程
属性对象的调度属性设置为PTHREAD_EXPLICIT_SCHED."

这适用于Linux posix线程(NPTL pthread)吗?

如果没有,影响使用pthread_create()创建的线程的优先级和调度策略的因素是什么?

linux gcc pthreads nptl

5
推荐指数
1
解决办法
3143
查看次数

openssl X509_verify_cert() 是否验证证书中的签名?

openssl X509_verify_cert() API 是否验证证书中的 RSA 签名?

据我了解,该 API 仅检查证书有效性(如日期检查等)。

有人请澄清吗?

c linux openssl

4
推荐指数
1
解决办法
4512
查看次数

为什么共享库路径在可执行文件中被硬编码?

最近我得到了一个测试二进制文件。当我使用 objdump 检查它时,我观察到它包含硬编码的库路径。为什么需要像这样对路径进行硬编码?路径不应该取自 SHELL 环境变量或 -L 参数吗?

objdump -p 测试程序

输出包括共享库的硬编码路径:

....
  NEEDED      /home/test/lib/liba.so
  NEEDED      /home/test/lib/libb.so
  NEEDED      /home/test/lib/libc.so
....
Run Code Online (Sandbox Code Playgroud)

c linux gcc

4
推荐指数
1
解决办法
1999
查看次数

标签 统计

linux ×10

c ×9

alsa ×4

signals ×3

audio ×2

gcc ×2

pthreads ×2

interrupt-handling ×1

multithreading ×1

nptl ×1

openssl ×1