我使用Indy TIdhttp组件构建了一个简单的网站监控应用程序.我想检测何时在指定的时间范围内没有返回指定的页面(我使用5000毫秒).作为测试,我在网站上创建了一个页面,故意需要15秒才能响应.但是我不能让我的程序在5秒后"放弃".我尝试过ReadTimeout,一个使用计时器和OnWorkBegin事件的建议解决方案(在get调用之后永远无法让OnWorkBegin立即触发).
注意我并不担心连接超时.我担心的是服务器返回页面的超时.
这是我一直在使用的一些源代码.它包含我引用的许多元素.
procedure TServLogic.WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
GetTimer.Enabled := True;
end;
procedure TServLogic.WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
GetTimer.Enabled := False;
end;
procedure TServLogic.GetTimerTimer(Sender: TObject);
begin
idHttp.Disconnect(True);
end;
procedure TServLogic.CallHttp(mlink: String): String;
begin
result := '';
GetTimer := TTimer.create(nil);
GetTimer.OnTimer := GetTimerTimer;
GetTimer.Interval := 5000;
try
IdHTTP := TIdHTTP.create(nil);
idhttp.ReadTimeout := 5000;
IdHttp.OnWorkBegin := WorkBegin;
IdHttp.OnWorkEnd := WorkEnd;
try
result := idhttp.get(mLink);
except
on e:exception do begin …Run Code Online (Sandbox Code Playgroud) 我根据EdgeCase 的Git Immersion教程创建了一个Git别名,如下所示:
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
Run Code Online (Sandbox Code Playgroud)
但现在它似乎正在分页结果 - 显示(END)结果后的终端显示,迫使我Q继续工作.我读到通过添加--no-pager标签,您可以禁用此功能; 如何将其合并到别名中?我在最后,之前log和之后尝试过,而且没有一个能够奏效.Git抛出一个错误,说它是一个无法识别的参数,或者它改变了环境变量.有什么建议?
我正在使用SysUtils.Format函数和variant值,我发现只有格式字符串才能使用此函数%s.我检查了有关Format函数的文档,但是没有任何关于如何处理变量值的引用.
考虑这个简单的应用:
{$APPTYPE CONSOLE}
uses
Variants,
SysUtils;
procedure TestFormat;
var
v : Variant;
begin
v:=100;
writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))]));
writeln(Format('The value of v is %s',[v]));//ok
v:='100';
writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))]));
writeln(Format('The value of v is %s',[v]));//ok
v:=100;
writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))]));
writeln(Format('The value of v is %d',[v]));//raise a EConvertError exception EConvertError: Format '%d' invalid or incompatible with argument
end;
begin
try
TestFormat;
except
on E: Exception …Run Code Online (Sandbox Code Playgroud) 我有点困惑为什么Delphi在编译时链接和调试信息时有调试信息.
他们之间有什么区别?
此C++代码检查是否o为a Node *,如果是,则调用方法d.
if (Node * d = dynamic_cast<Node *>(o)) d->do_it();
Run Code Online (Sandbox Code Playgroud)
在C#中编写等效的最短和/或最有效的方法是什么?
我有一个Delphi控制台应用程序,最终需要启动两个应用程序之一.
我遇到一些问题让ShellExecute无错误地工作,我认为问题与没有控制台应用程序的句柄有关.
引起我悲伤的一句话是:
ShellExecute(0, 'open', 'someapplication.exe', nil, nil, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
我认为句柄中的0是问题,因为它编译好并在调试器中运行OK,但如果我尝试运行可执行文件,我会得到一个未处理的错误(控制台应用程序认为它已经结束了).
在我的Win32 VCL应用程序中,我使用ShellExecute来启动一些较小的Delphi控制台应用程序.有没有办法控制那些控制台窗口的位置?我想以屏幕为中心启动它们.
#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
构造函数和析构函数不成对出现?
我的一位同事向我展示了用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) 考虑一对相关结构的以下声明.后代类不添加任何成员变量,唯一的成员函数是一个构造函数,它不会做任何事情,只是将其所有参数转发给基类的构造函数.
struct Base {
Base(int a, char const* b):
a(a), b(b)
{ }
int a;
char const* b;
};
struct Descendant: Base {
Descendant(int a, char const* b):
Base(a, b)
{ }
};
Run Code Online (Sandbox Code Playgroud)
现在考虑使用这些类型的以下代码.函数foo期望接收一个数组Base.但是,main定义一个数组Descendant并将其传递给它foo.
void foo(Base* array, unsigned len)
{
/* <access contents of array> */
}
int main()
{
Descendant main_array[] = {
Descendant(0, "zero"),
Descendant(1, "one")
};
foo(main_array, 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是否定义了该程序的行为?答案是否取决于它的主体foo,例如它是写入数组还是只读取它?
如果sizeof(Derived)不相等 …
delphi ×6
c++ ×3
alias ×1
arrays ×1
c# ×1
casting ×1
console ×1
constructor ×1
debugging ×1
delphi-2010 ×1
delphi-xe ×1
git ×1
git-config ×1
indy ×1
inheritance ×1
shellexecute ×1
terminal ×1
variants ×1