小编Fol*_*den的帖子

std :: thread - 命名你的线程

新的C++有这个std :: thread类型.奇迹般有效.现在我想给每个线程一个名称以便更容易调试(比如java允许你).使用pthreads我会这样做:

pthread_setname_np(pthread_self(), "thread_name");
Run Code Online (Sandbox Code Playgroud)

但我怎么能用c ++ 0x做到这一点?我知道它在Linux系统下使用pthreads,但我想让我的应用程序可移植.有可能吗?

c++ multithreading c++11

52
推荐指数
4
解决办法
4万
查看次数

让iaxclient发送音频到/从缓冲区而不是音频设备获取音频

我正在尝试编写一个C++程序(尽管如果有人知道更好的(IAX/SIP)替代方案,那么连接到Asterisk服务器也会很好).

连接后,它应该听取音频和处理.它还应该发回音频.我正在使用https://sourceforge.net/projects/iaxclient/(注意有几个版本(beta版,常规版,svn版),它们的行为都不同).

现在,如果我理解了库的代码是正确的,那么它可以使用事件调用回调函数.其中一个事件是IAXC_EVENT_AUDIO.在那个IAXC_EVENT_AUDIO的结构中有一个方向; 传出来的.这就是我迷失的地方:对于某些版本的iaxclient,我只接收IAXC_SOURCE_REMOTE消息,其中包含两者.如果我切换到测试模式(应该只禁用音频设备),我通常什么也得不到.当我收到这两个IAXC_SOURCE_LOCAL和IAXC_SOURCE_REMOTE,我试图设置这些事件随机数据的缓冲器,但在所有的(我把它设置为RAW模式),不到达另一端.

任何人都有任何建议如何解决这个问题?

我的测试代码是:

#include <iaxclient.h>
#include <unistd.h>

int iaxc_event_callback(iaxc_event e)
{
    if (e.type == IAXC_EVENT_TEXT) {
        printf("text\n");
    }
    else if (e.type == IAXC_EVENT_LEVELS) {
        printf("level\n");
    }
    else if (e.type == IAXC_EVENT_STATE) {
        struct iaxc_ev_call_state *st = iaxc_get_event_state(&e);
        printf("\tcallno %d state %d format %d remote %s(%s)\n", st->callNo, st->state, st->format,st->remote, st->remote_name);
        iaxc_key_radio(st->callNo);
    }
    else if (e.type == IAXC_EVENT_NETSTAT) {
        printf("\tcallno %d rtt %d\n", e.ev.netstats.callNo, e.ev.netstats.rtt);
    }
    else if (e.type == IAXC_EVENT_AUDIO) {
        printf("\t AUDIO!!!! %d %u %d\n", …
Run Code Online (Sandbox Code Playgroud)

c++ asterisk

17
推荐指数
1
解决办法
287
查看次数

Java ByteBuffer性能问题

在处理多个千兆字节的文件时,我注意到一些奇怪的事情:似乎从使用filechannel的文件读取到使用allocateDirect分配的重用ByteBuffer对象比从MappedByteBuffer读取要慢得多,实际上它甚至比读取字节更慢 - 使用常规读取调用的数组!

我期望它(几乎)与从mappedbytebuffers读取一样快,因为我的ByteBuffer被分配了allocateDirect,因此读取应该直接在我的bytebuffer中结束而没有任何中间副本.

我现在的问题是:我做错了什么?或者bytebuffer + filechannel是否比常规io/mmap慢?

我在下面的示例代码中还添加了一些代码,将读取的内容转换为long值,因为这是我的实际代码不断执行的操作.我希望ByteBuffer getLong()方法比我自己的字节shuffeler快得多.

测试结果:mmap:3.828 bytebuffer:55.097常规i/o:38.175

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.nio.MappedByteBuffer;

class testbb {
    static final int size = 536870904, n = size / 24;

    static public long byteArrayToLong(byte [] in, int offset) {
        return ((((((((long)(in[offset + 0] & 0xff) << 8) | (long)(in[offset + 1] & 0xff)) << 8 | (long)(in[offset + 2] & 0xff)) << 8 | (long)(in[offset + 3] & 0xff)) << 8 …
Run Code Online (Sandbox Code Playgroud)

java performance nio bytebuffer

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

java和全屏多个监视器

我的Java应用程序的片段:

 JFrame f = new JFrame();
 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
 GraphicsDevice gd = ge.getDefaultScreenDevice();
 gd.setFullScreenWindow(f);
Run Code Online (Sandbox Code Playgroud)

所以它的作用是让它自动全屏.现在奇怪的是程序是全屏的,但只能在一台显示器上!例如,我有一个带有两个屏幕的Windows Vista系统,它们组合在一个桌面上.怎么做才能让它全屏显示所有显示器?


好的我试过了:

import java.awt.image.ColorModel;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;

class grdevs
{
    public static void main(String [] args)
    {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gs = ge.getScreenDevices();
        for(GraphicsDevice curGs : gs)
        {
            GraphicsConfiguration[] gc = curGs.getConfigurations();
            for(GraphicsConfiguration curGc : gc)
            {
                Rectangle bounds = curGc.getBounds();
                ColorModel cm = curGc.getColorModel();

                System.out.println("" + bounds.getX() + "," + bounds.getY() + " " + bounds.getWidth() …
Run Code Online (Sandbox Code Playgroud)

java swing fullscreen

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

gpgme:签名数据时选择私钥

使用gpgme(gpg/gnupg的开发库),我正在尝试签署一些数据.在密钥环中,我有超过1个私钥,所以我想选择正确的私钥.这失败了:"Unusable secret key(117440566)".密钥是用gnupg2本身生成的.使用gnupg时也会出现问题.

sec   1024R/14B7E8E6 2015-05-27
      Key fingerprint = 95C7 6C5E F839 43DA 2F32  2CF4 D2C2 5144 14B7 E8E6
uid                  testkey2 (testkey2) <test@vanheusden.com>
ssb   1024R/ED8059EA 2015-05-27

pub  rsa1024/14B7E8E6
     created: 2015-05-27  expires: never       usage: SC
     trust: ultimate      validity: ultimate
sub  rsa1024/ED8059EA
     created: 2015-05-27  expires: never       usage: E
sub  rsa1024/74D6F5C6
     created: 2015-05-31  expires: never       usage: S
Run Code Online (Sandbox Code Playgroud)

首先,我检查是否有所选密钥的私钥:

gpgme_op_keylist_start(..., ..., 1);
if (gpgme_op_keylist_nex() == GPG_ERR_NO_ERROR) { proceed }
Run Code Online (Sandbox Code Playgroud)

签署:

gpgme_new()
gpgme_set_pinentry_mode(GPGME_PINENTRY_MODE_LOOPBACK) // yes i installed v2.1
gpgme_set_passphrase_cb()
/* ...binary to gpgme_data_t... */
gpgme_data_set_encoding(GPGME_DATA_ENCODING_BINARY) …
Run Code Online (Sandbox Code Playgroud)

gnupg gpgme

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

Java:线程安全的RandomAccessFile

经过一些严肃的googleing后,我发现RandomAccessFile-class不是线程安全的.现在我可以使用一个信号量来锁定所有的读写操作,但我不认为它表现得非常好.理论上,应该可以一次执行多次读取和一次写入.我怎么能用Java做到这一点?有可能吗?

谢谢!

java multithreading locking thread-safety

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

如何从同步例程通知异步例程?

我有一个异步websockets侦听器。该侦听器从同步主循环传递消息。我想让异步websockets侦听器知道有一条新消息要发送。

目前,我使用轮询循环(不良)来实现该目标。我尝试使用cond.notify_all(),但是不能在异步代码之外使用?

代码片段:

ws_data = {}
ws_data_lock = threading.Lock()

async def ws_serve(websocket, path):
    global ws_data
    global ws_data_lock

    listen_pair = await websocket.recv()

    p_fen = None

    while True:
        send = None

        with ws_data_lock:
            if p_fen == None or ws_data[listen_pair] != p_fen:
                send = p_fen = ws_data[listen_pair]

        if send:
            await websocket.send(send)

        await asyncio.sleep(0.25)
Run Code Online (Sandbox Code Playgroud)

...

def run_websockets_server():
    start_server = websockets.serve(ws_serve, ws_interface, ws_port)

    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()

def client_listener():
    while True:
        with ws_data_lock:
            ws_data[pair_id] = (p1_user, p2_user, time.time())
            # here I would like to let all websocket …
Run Code Online (Sandbox Code Playgroud)

python asynchronous

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

找出哪些线程拥有 pthread_rwlock_t

我怎样才能看到(在linux上)哪些线程拥有pthread_rwlock_t(或std::shared_mutex)?

对于常规互斥体,是否可以确定持有互斥体的线程?但如何对 ar/w 锁执行此操作?

multithreading

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

java过度使用内存

在我的一个项目中,我不断压缩很少的数据块.现在我发现jvm然后增长到6GB的RAM(驻留(RES)RAM,不共享或虚拟等)然后因为内存不足而死亡.好像垃圾收集器从未运行过.我已经拿出相关代码并将其粘贴在下面.当我运行它(java6,32位linux)时,它增长到1GB内存.有人知道如何减少内存使用量?

import java.util.Random;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

class test  {
    int blockSize = 4096;
    Random r = new Random();

    public test() throws Exception {
        blockSize = 4096;
        byte [] data = new byte[blockSize];
        for(int index=0; index<blockSize; index++)
            data[index] = (byte)r.nextInt();

        for(long cnt=0; cnt<1000000; cnt++) {
            byte [] result = compress(data);
            if (result != null)
                data[0] = result[0];
        }
    }

    byte [] compress(byte [] in) {
        assert in.length == blockSize;

        Deflater compresser = new Deflater();
        compresser.setInput(in);
        compresser.finish();
        byte [] out = …
Run Code Online (Sandbox Code Playgroud)

java jvm out-of-memory

3
推荐指数
1
解决办法
2310
查看次数

PL/I 且不在制表位上打印

我有以下 PL/I 代码:

    declare 1 u union,
      2 c character(1),
      2 ci fixed binary(4) unsigned;

    ci = data_mem(data_ptr);
    put list (c);
Run Code Online (Sandbox Code Playgroud)

它的作用是接受一个整数并输出它,就好像它是一个 ascii/ebcdic 值一样。所以它显示了字符。到目前为止这有效。现在的问题是每个字符以24个空格间隔打印,就好像插入了3个TAB一样。我尝试先将 c 转换为字符串,然后应用 trim() 但这没有帮助。

有任何想法吗?

mainframe pl-i

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

s/360 assembly:如何实现调用堆栈

我想编写一个调用自身和其他函数的函数(在hlasm中).

在x86或z80(可能还有其他)上,您只需调用函数,并在其结尾处进行返回.然后处理器将存储和检索返回地址.

指令集有以下指令:BAL reg,func ...将寄存器中的寄存器地址存储在寄存器中,最后你可以将BR寄存器跳转到该寄存器地址.另一个问题是显然没有推/弹指令.

所以我现在有点st ..

问候

assembly callstack mainframe reentrancy zos

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