小编VSZ*_*SZM的帖子

动态获取当前行号

Java中有没有办法通过反射或一些很棒的API动态获取当前行号?就像异常发生时一样,行号在堆栈跟踪中打印出来,如下所示:

at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348)
Run Code Online (Sandbox Code Playgroud)

现在有没有办法在下面的代码中打印或记录?

log.error("Error in: " + this.getClass.getName() + "at line #"+ this.getClass.getActualLine());
Run Code Online (Sandbox Code Playgroud)

你可能会问,我为什么不简单地打印行号?好吧,因为代码可能会在特定的log.error()方法调用之前被删除或添加.

java reflection

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

C++ 11多重读取和一个写入线程互斥

我有一个应用程序,其中一些STL容器在3个线程中读取,并用2写入.我知道有多线程容器的TBB,但它不是我的应用程序中的一个选项.

所以我想使用std :: mutex和我的双手使程序线程安全.这是我所做的简单版本:

int readers = 0;
std::mutex write;

// One write, no reads.
void write_fun()
{
    write.lock();// We lock the resource
    while(readers > 0){}// We wait till everyone finishes read.
    // DO WRITE
    write.unlock();// Release
}

// Multiple reads, no write
void read_fun()
{
    // We wait if it is being written.
    while(!write.try_lock()){}
    write.unlock();

    readers++;
    // do read
    readers--;
}
Run Code Online (Sandbox Code Playgroud)

这是在C++ 11中执行此操作的正确方法吗?

c++ multithreading c++11

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

如何将经过训练的 TF1 protobuf 模型加载到 TF2 中?

更新:这是 tensorflow 中的一个错误。在此处跟踪进度。

我已经使用稳定基线创建并训练了一个模型,该模型使用 Tensorflow 1。现在我需要在我只能访问 Tensorflow 2 或 PyTorch 的环境中使用这个训练模型。我想我会使用 Tensorflow 2,因为文档说我应该能够加载使用 Tensorflow 1 创建的模型。

我可以在 Tensorflow 1 中毫无问题地加载 pb 文件

global_session = tf.Session()

with global_session.as_default():
    model_loaded = tf.saved_model.load_v2('tensorflow_model')
    model_loaded = model_loaded.signatures['serving_default']

init = tf.global_variables_initializer()
global_session.run(init)
Run Code Online (Sandbox Code Playgroud)

但是在 Tensorflow 2 中,我收到以下错误

can_be_imported = tf.saved_model.contains_saved_model('tensorflow_model')
assert(can_be_imported)
model_loaded = tf.saved_model.load('tensorflow_model/')

ValueError: Node 'loss/gradients/model/batch_normalization_3/FusedBatchNormV3_1_grad/FusedBatchNormGradV3' has an _output_shapes attribute inconsistent with the GraphDef for output #3: Dimension 0 in both shapes must be equal, but are 0 …
Run Code Online (Sandbox Code Playgroud)

tensorflow tensorflow2.0 stable-baselines

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

直接在所有窗口的顶部绘图

我需要一种直接在Windows中绘制到显示屏幕的方法.程序需要绘制的东西是非常简单的形状和一些文本.

我想开发一个与Xfire类似的程序.即它可以在全屏应用程序之上绘制.因此,例如,我想创建一个始终在后台运行的程序,并在即时全屏应用程序运行时(游戏,电影等)在右下角显示系统时间.我的程序还必须对按下按钮组合等事件做出反应(例如ctrl + alt + 1).

我的程序不能捕获鼠标事件.因此,如果它绘制一个圆圈并且在其下面有一个外部应用程序的按钮,则外部应用程序的按钮应该识别该单击.

这在Windows中怎么可能?

我想用以下语言之一实现这个程序:C++,C#,Java

我将非常感谢一些可以帮助我实现这一目标的API /教程.

c# c++ java windows

8
推荐指数
0
解决办法
9343
查看次数

使用反射设置对象的所有bool成员

我有一个结构,有很多名为bool的成员.(请为此示例留下良好做法,现在不考虑这些做法).

我想将这些值随机设置为true或false,仅用于测试目的.

我怎么能通过反思来做到这一点?

这是我到目前为止:

        Random r = new Random();
        foreach (var bool_field in state.GetType().GetFields().Where(x => x.GetType() == false.GetType()))
        {
            bool_field.SetValue(state, r.Next() % 2 == 0 ? true : false);
        }
Run Code Online (Sandbox Code Playgroud)

不幸的是,它永远不会进入循环.

更新1:

以下是SystemState结构的外观,它是状态变量的类型.它充满了bool汽车属性.

public struct SystemState
{
     ...
     public bool CanYouHelpMeOnThisOne { get; set; }
     ...
}
Run Code Online (Sandbox Code Playgroud)

更新2:

下面发布的解决方案似乎很好,但它不起作用.原因是SystemState是一个结构而不是一个类.因此,它是Value类型而不是Reference类型,因此调用SetValue方法无效.将SystemState更改为class后,以下解决方案完美运行.

现在有没有其他方法,在不将SystemState更改为类的情况下实现此目的?

c# reflection

7
推荐指数
1
解决办法
4192
查看次数

C#线程安全的静态成员

我有一个带有静态成员的C#类,它从多个线程读取并写在一个线程中.

据我所知,Uint64读写不是所有系统上的原子操作,所以我必须手动保证线程安全.

我有一些关于如何做到这一点的想法.

  1. 用和原子包装类一起做,比如c ++中的std :: atomic.在C#中是否有类似的东西?

  2. 将挥发性修饰符与静态字段一起使用.但是这是不允许的.为什么?

  3. 我终于做了以下事情:

    private static object tick_time_lock;
    private static UInt64 _currentTickTime;
    public static UInt64 CurrentTickTime 
    {
        get
        {
            return _currentTickTime;
        }
        set
        {
            lock (tick_time_lock)
            {
                _currentTickTime = value;
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

这是使这个字段线程安全的正确方法吗?

.net c# multithreading atomicity

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

相对于当前脚本而不是相对于工作目录加载 q 文件

我想加载与我当前所在的源文件相关的 aq 脚本,而不管 q 进程启动时我在哪里。

例如,我有以下项目:

- myproject/
    a.q
    b.q
Run Code Online (Sandbox Code Playgroud)

a.q我的某处有以下几行:

...
system"l b.q";
...
Run Code Online (Sandbox Code Playgroud)

我的问题是,这仅在我cd进入myproject/时才有效,因此它b.q位于当前工作目录中。

我希望能够在不使用绝对路径的情况下b.qa.q哪里开始加载脚本

(在 python 中,我可以这样做,例如使用os.path.realpath()

kdb

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

将整个C#项目转换为C++

我有一个用C#编写的个人项目,但是由于一些问题和平台依赖性,我决定用C++重写程序.

该项目包含数十个类和数千行代码.我想知道是否有办法至少生成正确的头文件,并且cpp文件只包含方法存根.

我知道直接代码生成是不可能的,但只生成程序的骨架将是一个很大的帮助.

我的C#项目是Visual Studio 2013项目,我想将其转换为本机c ++,因此不包含CLI.

我想做的是:

  1. 项目清单
  2. 抓住项目中的每个班级.
  3. 根据类生成头文件.
  4. 使用基于类的方法存根生成.cpp文件.

c# c++ code-generation

-1
推荐指数
1
解决办法
155
查看次数