小编Rob*_*edy的帖子

Windows程序如何暂时更改其时区?

我写了一个函数来返回time_t给定日期对应午夜的值.当某一天没有午夜时,它会返回最早的可用时间; 例如,当埃及进入夏令时时,就会发生这种情况.今年,时间变更将于4月29日晚上午夜生效,因此时钟从23:59直接到01:00.

现在我正在为这个函数编写单元测试,其中一个测试应该复制埃及场景.在Unix中,我可以像这样完成它:

putenv("TZ", "Egypt", true);
tzset();
Run Code Online (Sandbox Code Playgroud)

在这样做之后,进一步的呼吁localtime表现得好像他们在埃及而不是明尼苏达,我的测试通过了.但是,仅仅设置环境变量对Windows没有任何影响.如果不影响系统上运行的其他程序,我该怎么做才能让单元测试认为它在其他地方?

c++ windows timezone unit-testing

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

什么是C#相当于C++的dynamic_cast?

此C++代码检查是否o为a Node *,如果是,则调用方法d.

if (Node * d = dynamic_cast<Node *>(o)) d->do_it();
Run Code Online (Sandbox Code Playgroud)

在C#中编写等效的最短和/或最有效的方法是什么?

c# c++ casting

11
推荐指数
2
解决办法
7214
查看次数

为什么我的析构函数似乎比构造函数更频繁地被调用?

#include<iostream>
using namespace std;

class A{
public:
    static int cnt;
    A()
    { 
        ++cnt; 
        cout<<"constructor:"<<cnt<<endl;
    }
    ~A()
    {
        --cnt;
        cout<<"destructor:"<<cnt<<endl;
    }
};

int A::cnt = 0;

A f(A x){
    return x;
}
int main(){
    A a0;
    A a1 = f(a0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序将输出:

constructor:1
destructor:0
destructor:-1
destructor:-2

构造函数和析构函数不成对出现?

c++ constructor

11
推荐指数
2
解决办法
661
查看次数

当我在未初始化的函数结果上调用方法时,为什么不能获得访问冲突?

我的一位同事向我展示了用Delphi-XE XE版本15.0.3953.35171编写的代码,我认为它应该引发访问冲突.代码如下:

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm3 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
   function test:TstringList;
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
var aStrList : TStringList;
begin
 aStrList := TStringList.Create;
 test;
 FreeAndNil(aStrList);
end;

function TForm3.test: TstringList;
var i:Integer;
begin
 for i:=0 to 1000 do
  Result.Add('aaa');//AV?
end;

end.
Run Code Online (Sandbox Code Playgroud)

检查aStrList和Result具有以下结果:

aStrList: TStringList $12FEDC : $42138A


Result: TStringList $12FEC4 : $B01B90 …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

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

单击控件时如何获取鼠标的坐标?

在TImage的OnClick事件中,我想提取鼠标的x,y坐标.我更喜欢它们与图像有关,但与形式或窗口相关也同样好.

delphi mouse timage

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

如果终止挂起的线程是个好主意,我该如何安全地进行?

我的Delphi程序在很大程度上依赖于Outlook自动化.2007-SP2之前的Outlook版本由于编写错误的插件和编写错误的Outlook代码而倾向于卡在内存中.

如果Outlook卡住,调用CreateOleObject('Outlook.Application')或GetActiveObject ...不会返回并保持我的应用程序挂起,直到任务管理器中的Outlook.exe关闭.

我想到了一个解决方案,但我不确定这是否是好的做法.

我在一个单独的线程中使用CreateOleObject启动Outlook,在我的主线程中等待10秒,如果Outlook挂起(CreateOleObject没有返回),则让用户从我的程序中终止Outlook.exe进程.

但是因为我不想强迫用户杀死Outlook.exe进程,作为替代方案,我还需要一种方法来杀死程序中的新线程,该线程现在一直挂起.

  1. 这是好习惯吗?
  2. 如何在不泄漏内存的情况下终止Delphi中的挂起线程?

delphi outlook automation multithreading

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

显式模板实例化如何影响链接器可以找到的内容?

请参阅以下代码,请清除我的疑虑.

  1. 由于ABC是一个模板,为什么当我们在test.cpp中放置ABC类成员函数的定义时它不显示错误?

  2. 如果我在test.h和remve 2中放入test.cpp代码,那么它可以正常工作.为什么?

.

// test.h 
template <typename T> 
class ABC { 
public: 
   void foo( T& ); 
   void bar( T& ); 
}; 
// test.cpp 
template <typename T> 
void ABC<T>::foo( T& ) {} // definition 
template <typename T> 
void ABC<T>::bar( T& ) {} // definition 

template void ABC<char>::foo( char & );  // 1 
template class ABC<char>;                // 2 
// main.cpp 
#include "test.h" 
int main() { 
   ABC<char> a; 
   a.foo();     // valid with 1 or 2 
   a.bar();     // link error if only …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

如何分隔INI文件中的部分?

保存到INI文件时,尤其是在定义了多个部分时,数据将一起保存,部分之间不存在任何行.

对于外部编辑,将每个部分与换行符分开会很方便,以便更容易查看和编辑INI文件.

例如:

标准Ini

[GENERAL]
value1=0
value2=somestring
[ADVANCED]
type=1
autosave=0
[OTHER]
showatstartup=1
Run Code Online (Sandbox Code Playgroud)

Ini有分隔线

[GENERAL]
value1=0
value2=somestring

[ADVANCED]
type=1
autosave=0

[OTHER]
showatstartup=1
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

delphi ini

10
推荐指数
2
解决办法
2241
查看次数

优化编译器如何决定展开循环的时间和数量?

当编译器执行循环展开优化时,它如何确定展开循环的因素或是否展开整个循环?由于这是空间性能权衡,平均而言,这种优化技术在使程序运行得更好方面效率如何?此外,在什么条件下建议使用这种技术(即某些操作或计算)?

这不必特定于某个编译器.它可以是任何解释,概述这种技术背后的想法以及在实践中观察到的内容.

c c++ performance compiler-optimization loop-unrolling

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

如何激活显示为进度条的网格单元的就地编辑器?

我的DBTreeListView中的一个单元格绑定到作为进度条的存储库项目.

我希望能够通过单击此单元格来编辑显示的进度.在这个阶段,我的应用程序应该将其单元格更改为另一个存储库项目:一个文本字段,我将能够插入一个值.将焦点更改为另一个单元格后,应再次显示我的进度条,显示新值.我该怎么做呢?

DBTreeListView具有列事件OnGetEditingPropertyOnGetEditProperties.我可能会使用其中一个(或两个),但不能提出任何好主意.

delphi inplace-editing progress-bar

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