小编Jay*_*ton的帖子

是否有C++设计模式实现控制线程拥有锁定资源的时间量的机制或互斥体?

我正在寻找一种方法来保证线程锁定特定资源的任何时候,它被强制在特定时间段之后释放该资源(如果它还没有释放它).设想一个连接,您需要限制任何特定线程可以拥有该连接的时间.

我设想这是如何使用它:

{
    std::lock_guard<std::TimeLimitedMutex> lock(this->myTimeLimitedMutex, timeout);
    try {
        // perform some operation with the resource that myTimeLimitedMutex guards. 
    }
    catch (MutexTimeoutException ex) {
        // perform cleanup
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到有一个timed_mutex,如果无法获取锁,程序会超时.我需要在获取锁之后发生超时.

在某些情况下,您可以获得可以意外删除的资源.例如,tcp套接字 - 一旦建立套接字连接,每一侧的代码都需要处理另一方丢弃连接的情况.

我正在寻找一种处理通常超时的资源类型的模式,但是当它们没有时,它们需要被重置.这不必处理每种类型的资源.

c++ mutex deadlock

16
推荐指数
3
解决办法
1321
查看次数

三角形 - 二维方形交点试验

如何测试三角形和正方形是否相互交叉?

当我们知道它是方形而不是矩形时,有没有什么方法可以优化它?此外,方形是轴对齐的,这样可以提高性能吗?

或者我应该将正方形分成三角形,并进行两次三角形 - 三角形相交检查?

编辑:澄清:我正试图检查这两个形状是否以任何方式相互重叠.所以三角形可以在正方形内,正方形可以在三角形内部,并且它也应该返回true.

c++ math geometry intersection collision-detection

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

为什么MinGW不会出现在Eclipse/Indigo CDT工具链列表中?

我正在尝试在我的Windows 7桌面上运行的Eclipse(Indigo)上建立一个C/C++开发环境.我按照eclipse.org上的说明将MinGW安装到我的C盘,并将环境变量*MINGW_HOME*设置为C:\ MinGW并将C:\ MinGW\bin添加到我的路径中.

当我运行eclipse并尝试创建一个新的C或C++项目时,我应该将MinGW视为项目创建向导对话框中可用的工具链之一.相反,我在可用工具链列表中看到的只有:

- 其他工具链 -

当我从项目属性中选择工具链编辑器时,唯一可选的"当前工具链:"是No ToolChain.

我可以看到安装了C:\ MinGW,我可以从CMD提示窗口运行gcc和g ++,所以我很确定我已经正确设置了路径.

我可以在eclipse站点找到唯一的故障排除建议是我在我的PC上安装了MinGW工具链,但是Eclipse找不到它,但这些建议都不起作用.

我在这里错过了什么?

mingw eclipse-cdt

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

在Delphi 2007 Pascal初始化块中声明索引变量的语法是什么?

我需要在Delphi初始化块中初始化和数组.

看来你不能在初始化块中使用var块,因为这不会编译:

initialization
var
idx : Integer;
begin
    for idx := 0 to length(LastState)-1 do begin
        LastState[idx] := $FFFF;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

(第一个编译错误抱怨var):

([DCC错误] ScheAutoInfRb2.pas(6898):E2029预期语句但发现'VAR')

这也不编译(因为没有声明idx):

initialization

    for idx := 0 to length(Last_Pro2State)-1 do begin
        Last_Pro2State[idx] := $FFFF;
    end;
Run Code Online (Sandbox Code Playgroud)

[DCC错误] ScheAutoInfRb2.pas(6899):E2003未声明的标识符:'idx'

我知道我可以在主单元声明中声明一个索引器,但是它有一些缺点:

  1. 索引器的声明与其使用分开,但实现部分(可以是数百行),以及

  2. 索引器的范围包括"实现"部分中的所有功能和过程.

delphi pascal delphi-7

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

对于使用Delphi ObjectPascal的Guis,在(可能)更改它之前检查.Visible是否有用?

我继承了在Delphi RadStudio2007中实现的GUI,针对Windows XP嵌入式.我看到很多代码看起来像这样:

procedure TStatusForm.Status_refresh;

begin
    if DataModel.CommStatus = COMM_OK then begin
        if CommStatusOKImage.Visible<>True then CommStatusOKImage.Visible:=True;
        if CommStatusErrorImage.Visible<>False then CommStatusErrorImage.Visible:=False;
    end else begin
        if CommStatusOKImage.Visible<>False then CommStatusOKImage.Visible:=False;
        if CommStatusErrorImage.Visible<>True then CommStatusErrorImage.Visible:=True;
    end;
end
Run Code Online (Sandbox Code Playgroud)

我确实在Embarcadero网站上找到了这个代码示例:

procedure TForm1.ShowPaletteButtonClick(Sender: TObject);
begin
    if Form2.Visible = False then Form2.Visible := True;
    Form2.BringToFront;
end; 
Run Code Online (Sandbox Code Playgroud)

这显示了在更改之前检查Visible,但是没有解释通过首先检查它所提供的内容.

我试图理解为什么原始开发人员觉得有必要只设置Visible标志,如果要更改它,并且不选择以这种方式编码:

procedure TStatusForm.Status_refresh;

begin
    CommStatusOKImage.Visible := DataModel.CommStatus = COMM_OK;
    CommStatusErrorImage.Visible := not  CommStatusOKImage.Visible;
end
Run Code Online (Sandbox Code Playgroud)

是否存在我需要注意的性能问题或外观问题(例如屏幕闪烁)?

delphi delphi-7

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

如何修复在 Windows 10 上尝试升级 pip 时出现的此错误(无法找到资源 t32.exe)?

我收到以下错误:

ERROR: Exception:
Traceback (most recent call last):
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_internal\cli\base_command.py", line 186, in _main
    status = self.run(options, args)
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_internal\commands\install.py", line 395, in run
    installed = install_given_reqs(
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_internal\req\__init__.py", line 67, in install_given_reqs
    requirement.install(
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_internal\req\req_install.py", line 809, in install
    install_wheel(
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_internal\operations\install\wheel.py", line 607, in install_wheel
    install_unpacked_wheel(
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_internal\operations\install\wheel.py", line 548, in install_unpacked_wheel
    generated_console_scripts = maker.make_multiple(scripts_to_generate)
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_vendor\distlib\scripts.py", line 415, in make_multiple
    filenames.extend(self.make(specification, options))
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_internal\operations\install\wheel.py", line 280, in make
    return super(PipScriptMaker, self).make(specification, options)
  File "C:\Users\CR1008tu\AppData\Roaming\Python\Python38\site-packages\pip\_vendor\distlib\scripts.py", line 404, in …
Run Code Online (Sandbox Code Playgroud)

python pip python-3.x

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