小编fxa*_*xam的帖子

将整数增加到65535的最佳线程安全方法

我有一个System.Timers.Timer,它每隔3秒递增一次计数器.另一个线程也可以在某些条件下将此变量设置为任何值.

试图使用Interlocked.Increment,但它没有UInt16的重载.接下来要考虑的是锁定,但我不确定如何对此变量进行线程安全访问(读/写/增量).

编辑:代码最初使用int,但根据建议更改为UInt16

private volatile System.UInt16 mCounter = 0;
private readonly object mCounterLock = new object();
public System.UInt16 Counter {
  get {
    lock (mCounterLock) {
      return mCounter;
    }
  }
  set {
    lock (mCounterLock) {
      mCounter = value;
    }
  }
}
private System.Timers.Timer mCounterTimer;

void mCounter_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
  lock (mCounterLock) {
    Counter++;
  }
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading

12
推荐指数
3
解决办法
8796
查看次数

组织要进行单元测试的 C++ 项目的有效方法是什么?

我想知道组织将要进行单元测试的 C++ 项目和类的有效方法是什么。我读过很多与单元测试相关的帖子,但找不到实际的例子。

以下是我收集的一些方法:

方法A

  • 项目 A:“包含”项目 C 中的类的应用程序 (.exe) 项目
  • 项目 B:“包含”项目 C 中的类的单元测试 (.exe) 项目
  • 项目 C:静态库 (.lib) 项目,保留项目 A 使用的所有类

方法B

  • 项目 A:应用程序 (.exe) 项目,其内部包含所有类。
  • 项目 B:“链接”到项目 A 中的类的单元测试 (.exe) 项目

方法C(来自Miguel)

  • 只有一个项目,三种配置:
    • 调试:在调试模式下构建应用程序 .exe。
    • 发布:在发布模式下构建您的应用程序.exe。
    • 测试:构建单元测试框架,用单元测试 main() 替换应用程序的 main()

哪种方式更合适呢?你有什么其他的建议?

c++ code-organization visual-studio

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

为什么在将本地引用返回到局部变量时,编译器不会警告"返回局部变量或临时地址"?

在Visual Studio 2010中编译以下代码时会发生这种情况.我的问题是:如果函数返回局部变量的地址,C++编译器将发出警告,但为什么在返回本地变量的本地引用时不会发出警告?

它仍然是错误的(返回本地变量的本地引用),但只是编译器无法检测到它?检查'num'和'r'的地址表明它们共享相同的内存位置.

#include <iostream>  
using namespace std;

int & intReference() {
  int num = 5;
  int &r = num;
  cout << "\nAddress of num: " << &num;

  //return num; // Compiler warning: C4172: returning address of local variable or temporary
  return r; // No warning?
}

void main() {
  int &k = intReference();
  cout << "\nk = " << k;  // 5
  cout << "\nAddress of k: " << &k; // same address as num

  char c;
  cin.get(c); …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010

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

为什么Android SDK工具分为"平台工具"和"工具"目录?

什么决定一个工具进入特定目录?作为一个例子,adb在工具/中,但已转移到platform-tools /.为什么他们不能住在同一个目录中?

android

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

如何以编程方式在Windows操作系统中启用"网络发现"?

我的项目使用UPnP协议打开端口.窗口在默认情况下禁用UPnP设备发现,需要打开网络发现网络和共享中心启用UPnP设备的发现.

有没有办法以编程方式执行此操作?

c# windows upnp

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

是否可以始终使用指针而不是引用,以便在需要时轻松转换为智能指针?

我知道引用比指针更受欢迎,但改变所有那些"."是非常繁琐的.在需要时" - >".因此,总是使用指针而不是引用是一种可接受的做法,如果需要,可以轻松地将它们转换为智能指针吗?或者有没有办法快速更改指针的引用?

c++

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

使用子表单在WinForms应用程序中执行依赖项注入

假设一个主窗体有几个菜单项.每个菜单项都会显示另一个表单.以下代码是在这种情况下进行依赖注入的好方法吗?

public class MainForm: Form {
  private IAboutForm _aboutForm;
  private IOptionsForm _optionsForm;
  private IDownloadsForm _downloadsForm;

  MainForm(IAboutForm aboutForm, IOptionsForm optionsForm, IDownloadsForm downloadsForm) { // add as many form dependencies as required
    _aboutForm = aboutForm;
    _optionsForm = optionsForm;
    _downloadsForm = downloadsForm;

    InitializeComponent();
  }

  private void AboutMenuItem_Click(object sender, System.EventArgs e) {
    _aboutForm.ShowDialog(this);
  }

  private void DownloadsMenuItem_Click(object sender, System.EventArgs e) {
    _downloads.Show();
    _downloads.BringToFront();
  }

}
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection winforms

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