小编Skr*_*rud的帖子

如何从Windows命令行获取应用程序退出代码?

我正在运行一个程序,想看看它的返回代码是什么(因为它根据不同的错误返回不同的代码).

我知道在Bash中我可以通过运行来做到这一点

回声$?

在Windows上使用cmd.exe时该怎么办?

windows command-line cmd process exit-code

764
推荐指数
6
解决办法
71万
查看次数

如何从任意pthread_t获取线程ID?

我有一个pthread_t,我想改变它的CPU亲和力.问题是我使用的是glibc 2.3.2,它没有pthread_setaffinity_np().但这没关系,因为pthread_setaffinity_np()本身就是sched_setaffinity()的包装器,可以通过传递线程ID而不是进程ID来调用,以设置任意线程的关联.

但是 ...... sched_setaffinity可以使用的线程ID是一个操作系统线程ID,可以从gettid()系统调用获得.这与opaque类型pthread_t不同,gettid()只返回当前线程的thread-id .我需要能够设置任意线程的CPU亲和性.

不幸的是,我无法访问pthread的私有部分,这会让我通过将pthread_t转换为a来窃取线程ID struct pthread *.我想,更好的是,因为依赖私有实现需要更多麻烦.

我也一直在阅读pthread_getunique_np函数,但是这会返回一个"唯一的整数标识符" - 我认为它不会以任何形式或形式等同于OS线程ID.

因此,问题是:如何从任意pthread_t获取线程ID?

c unix linux pthreads system-calls

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

如何在字符串比较中忽略UTF-8字节顺序标记?

我在使用Visual Studio 2010比较C#4.0中的单元测试中的字符串时遇到问题.同样的测试用例在Visual Studio 2008中正常工作(使用C#3.5).

这是相关的代码段:

byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);

Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

在调试此测试时,该data字符串在肉眼看来包含与文字完全相同的字符串.当我打电话data.ToCharArray()时,我注意到该字符串的第一个字节data是价值65279这是UTF-8字节顺序标记.我不明白的是为什么要Encoding.UTF8.GetString()保持这个字节.

如何获取Encoding.UTF8.GetString()把字节顺序标记得到的字符串中?

更新:问题在于GetData(),它从磁盘读取文件,使用从文件中读取数据FileStream.readbytes().我通过使用a StreamReader并使用字符串将字符串转换为字节来纠正这个问题Encoding.UTF8.GetBytes(),这应该是它本来应该做的事情!谢谢你的帮助.

c# unit-testing equality utf-8 visual-studio-2010

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

处理多个对象时的良好编程风格

我一直在编写一个棋盘游戏的软件版本.到目前为止,我已经编写了与游戏板上的物理对象相对应的类.我很喜欢编写程序逻辑,但是我发现很多逻辑类都需要访问相同的对象.

起初我将相应的对象传递给方法,因为它们被调用,但这变得非常乏味,特别是当方法需要许多对象来执行它们的任务时.为了解决这个问题,我创建了一个初始化和存储我需要的所有对象的类.这允许我通过调用Assets.dice()从任何类访问对象.

但是现在我已经考虑过了,这似乎不对.这就是为什么我在这里,我担心我创造了某种神级.这种恐惧是没有根据的,还是我创造了灾难的秘诀?

java oop coding-style object shared-objects

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

模态对话框关闭时,Delphi CMExit消息未发送?

在我正在处理的应用程序的一部分中,有一个表单控件在接收CMExit消息时进行验证,这正是Delphi文档所说的(这段代码示例来自Delphi帮助文件):

procedure TDBCalendar.CMExit(var Message: TWMNoParams);
begin
 try
  FDataLink.UpdateRecord;                          { tell data link to update database }
 except
  on Exception do SetFocus;                      { if it failed, don't let focus leave }
 end;
 inherited;
end;
Run Code Online (Sandbox Code Playgroud)

这样做的目的是在控件失去焦点时立即执行验证.因此,例如,如果我单击"确定"按钮,表单控件将失去焦点,此方法将运行,并且异常会将焦点设置回该表单控件.(因此,OK按钮上的"click"事件永远不会通过,对话框永远不会关闭).

我遇到的问题是这个表单控件在一个模态对话框窗口内.单击确实确实发送CMExit消息并导致记录更新(并进行验证).但是,在窗体控件中按Enter键会导致模式对话框关闭而不发送CMExit消息.好像表单控件从不"失去焦点".这意味着不仅在没有实际验证数据的表单的情况下关闭对话框,而且数据集也不会更新.

鉴于此问题,我放置数据集更新/验证代码的最佳位置在哪里?我可以将它移动到对话框表单本身并在OnCloseQuery处理程序中实现它,但这意味着逻辑在表单控件表单本身都是重复的.(表单控件在其他地方使用,我想避免改变它的行为).

(我推测,CM退出不会被触发,因为控制从未实际上失去焦点.窗体关闭,但形式仍然控制"有焦点"的封闭形式.)

delphi validation focus delphi-5

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