问题列表 - 第38389页

在Delphi中检测辅助线程上下文

在Delphi 2009和Windows API中,有没有办法检测特定代码段是否在辅助线程的上下文中运行?在伪代码中,我想能够说:

procedure DoSomething;
begin
  if InvokedBySecondaryThread then
    DoIt_ThreadSafeWay
  else
    DoIt_RegularWay;
end;
Run Code Online (Sandbox Code Playgroud)

这是我编写并已使用多年的日志库,现在我正在尝试适应可以从多个线程调用一个过程的情况.我的"常规方式"不是线程安全的.我知道如何使它线程安全,但我只想在实际需要时使用线程安全方法.

解释(不是必读的:-)

它归结为使用SendMessage和PostMessage将记录的消息分派给多个接收器(例如日志文件,控制台或VCL控件)之间的选择.使用PostMessage意味着在长时间阻塞操作正在进行时将不会收到消息,这有点违背了记录的目的,尤其是.用来表示进度.我想我可以用一个关键部分来保护SendMessage调用,但我再次希望只有在真正需要时才能这样做.

我知道system.pas中的全局变量IsMultiThread,但这只会告诉我应用程序已经启动了辅助线程.这些可能是由第三方库创建的线程,因此它们永远不会访问"我的"代码,因此它们的存在不会影响我的日志记录逻辑.

我真的希望我可以使用相同的低级库代码,无论它是从一个还是多个线程调用.例如,从辅助线程内部调用修改的线程安全日志记录过程很容易,但这会复制很多代码,我仍然要记住要做正确的事情.

@Lieven:目前,日志逻辑就像这样,有点简化了

我希望日志记录尽可能轻松,使用最少的设置代码并且不必担心管理对象生存期,因此库只暴露了许多重载的帮助程序,例如

procedure Log( const msgText : string; level : TLogLevel = lvNotice ); overload;
procedure Log( const msgText : string; Args : array of const; level : TLogLevel = lvNotice ); overload;
etc, including specialized routines that log a StringList, a boolean, an Exception and so on
Run Code Online (Sandbox Code Playgroud)

几乎所有其他事情都发生在单位的实施中.所有帮助程序最终都会调用

procedure _LogPostMessage( const msgText : string; level : TLogLevel );
Run Code Online (Sandbox Code Playgroud)

其中(a)检查单例调度程序对象是否已初始化; …

delphi multithreading detect

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

C++ 0x lambda返回值类型推理规则

考虑以下VC++ 10.0代码中的两个lambda函数:

template <typename T>
void eq(uint fieldno, T value) {
    table* index_table = db.get_index_table(fieldno);
    if (index_table == nullptr) return;
    std::set<uint> recs;
    index_table->scan_index<T>(value, [&](uint recno, T n)->bool {
        if (n != value) return false;
        recs.insert(recno);
        return true;
    });
    add_scalar_hits(fieldno, recs).is_hit =
        [=](tools::wsdb::field_instance_t& inst) {
            return boost::get<T>(inst) == value;
        };
}
Run Code Online (Sandbox Code Playgroud)

在第一个lambda函数中,我被迫使用->bool返回类型规范,而在第二个lambda中,编译器非常乐意推断返回类型.

我的问题是:编译器何时能推断出lambda的返回类型?只有当你有一个简单的单行时?

lambda type-inference c++11

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

将TDD用于库/ API代码和BDD作为集成测试是否有意义?

我是BDD的全新手,我想了解它在开发周期中的作用.在TDD方法中,我们通常会为库或apis编写单元测试,我们会模拟对象,这很好,因为它甚至可以驱动我们的设计.这些测试将在实际代码之前编写,这很好.

我知道BDD更多的是关于规范/场景测试,我可以看到它非常适合根据实际代码测试业务需求.但是编写这些测试的最佳实践是什么?我们是否仍然继续编写单独的测试(如在TDD中)模拟出依赖关系并为可能出错的每一件事编写单元测试?然后写我们的bdd测试?我们首先编写bdd测试吗?我们是否只针对单个组件编写bdd测试?

我使用.NET并且通常编写asp.net mvc应用程序,但这更像是一个理论问题而且独立于底层编程语言.

非常感谢.

tdd bdd unit-testing

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

jquery ajax一个接一个地调用循环而不停止页面呈现

我有一个超过100行的表.

每行包含pdf文件及其最后一个STATUS的描述.

状态显示pdf文件是否可读.

一旦在浏览器中加载了表,我就会从表的每一行创建每个文件名,并使用ajax调用对其进行处理.如果文件是可读的,我将该行的状态字段更新为READABLE.处理每个pdf文件需要30秒到1分钟(取决于文件的大小)

我不想使用异步调用并将所有100个请求发送到我的服务器togather.

当我使用async = false时.它逐个执行每个ajax调用,这就是我想要做的,但同时它会阻止用户浏览已加载的表.换句话说,用户有点卡住,直到所有这些ajax请求都完成了.然后他可以向下滚动阅读更多信息.

我想允许用户在后台阅读网页我想一个接一个地执行ajax请求来处理pdf文件并在每一行中更新它的状态.

我怎样才能做到这一点.

$('table.tableRecods tr').each(function(){

            fileWithPath = $('#filePath').text();
            $this = $(this);
            $this.find('td.status img.cropStatus').attr('src', 'img/loader.gif') ;           
                $.ajax({
                    url:'jsonCall.php',
                    async:false,
                    data: {file: escape(fileWithPath)},
                    success: function(data){        

                            if(data.status == 'true') {
                                $this.find('td.status img.readStatus').attr('src', 'img/icons/read.png') ;                                  
                            }else if(data.status == 'false'){
                                $this.find('td.status img.readStatus').attr('src', 'img/icons/__read.png') ;

                            }
                    }
                }); 

    });
Run Code Online (Sandbox Code Playgroud)

ajax jquery

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

COM +组件调用其他COM +组件 - "无法加载类型"

我有两个.NET程序集注册为COM +组件,我正在从常规控制台应用程序测试工具中测试它们;

Dim objFirst As New MyFirstComponent() 'COM+ initialisation
Dim RC As Boolean = objFirst.GetValue()
Run Code Online (Sandbox Code Playgroud)

方法调用成功执行.这是MyFirstComponent的定义;

<ProgId("MyFirstComponent")> _
<Guid("...")> _
<ClassInterface(ClassInterfaceType.None)> _
<Transaction(TransactionOption.Supported)> _
Public Class MyFirstComponent
    Inherits ServicedComponent
    Implements IMyFirstComponent

    Public Function GetValue() As Boolean Implements IMyFirstComponent.GetValue
        Dim objSecond As New MySecondComponent() 'COM+ initialisation
        Dim RC As Boolean = objSecond.GetValue()
        Return RC
    End Function

End Class
Run Code Online (Sandbox Code Playgroud)

在MySecondComponent初始化的时候,我得到一个带有以下消息的RemotingException;

无法加载类型'MySecondComponent',...,Version = ...,Culture = neutral,PublicKeyToken = ...'

所有程序集也都有很强的名称.我无法弄清楚为什么我可以成功触发对第一个组件的方法调用,但是当它试图随后加载第二个组件本身时,它无法解析该类型.

作为旁注,如果我在测试工具中运行"GetValue()"主体的代码,它会按预期执行.一旦事情进入调用其他COM +组件的COM +组件领域,问题似乎才会出现.

更新

我想我现在正在缩小这个问题.似乎COM +正在持续进行某些操作,我必须在运行客户端之前从组件服务窗口手动关闭COM +应用程序.之前的问题是我每次更改内容时都在测试客户端(比如将程序集添加到GAC),并且出于某种原因,COM +仍然认为无法找到程序集.关闭应用程序,将所需的程序集添加到GAC并再次运行客户端按预期工作.

这对我的小概念证明客户端来说很好.所以我回到我的真实代码并试了一下,但现在我又遇到了另一个奇怪的问题.我的COM +应用程序似乎无法找到他们正常的项目引用.我真的不想继续添加他们引用GAC的一切,所以我现在试图找出为什么我的普通,非COM +引用没有得到解决.

.net remoting com+

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

为什么我不能在SQL Server 2008中注册System.Web?

运行此命令:

CREATE ASSEMBLY 
[System.Web] from
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\system.web.dll'
with permission_set = UNSAFE
Run Code Online (Sandbox Code Playgroud)

给我这个错误:

消息10300,级别16,状态2,第1行

程序集"System.Web"引用程序集"system.web,version = 2.0.0.0,culture = neutral,publickeytoken = b03f5f7f11d50a3a.",它在当前数据库中不存在.SQL Server尝试从引用程序集来自的相同位置定位并自动加载引用的程序集,但该操作失败(原因:版本,区域性或公钥不匹配).请将引用的程序集加载到当前数据库中,然后重试您的请求.

......这听起来有点傻.看起来SQL Server认为System.Web程序集正在引用它自己.我怎样才能解决这个问题?

sql-server sqlclr

5
推荐指数
2
解决办法
4276
查看次数

在eclipse中设置JUnit超时

当我运行所有JUnit测试时,使用eclipse,我可以设置默认超时吗?

背景

我的经理坚持编写单元测试,有时需要5分钟才能完成.当我尝试运行我们的整个测试套件(仅约300次测试)时,可能需要30多分钟.我想放置一些可以阻止任何超过10秒的测试的东西.

我知道个别测试可以注释:

@Test(timeout=10000)
Run Code Online (Sandbox Code Playgroud)

但这样做会使他的长期测试总是失败.我希望他们在他的盒子上运行时工作(如果我必须在检查之前对项目进行微调,那是可以接受的.但是,从40个不同的测试文件中删除超时是不切实际的).

我也知道我可以创建一个ant任务来为所有测试设置默认超时,类似于:

<junit timeout="10000">
  ...
</junit>
Run Code Online (Sandbox Code Playgroud)

问题是我们通常使用右键单击>运行方式> JUnit测试从Eclipse中运行测试.

摘要

那么是否有一种相对无痛的方法为所有测试设置超时,可能使用运行配置设置,项目设置,或JUnit首选项,或环境变量,或什么?我甚至决定安装一些其他插件,让我右键单击特定的测试文件夹,并以其他方式运行所有测试,如通过蚂蚁或其他东西......

java eclipse junit unit-testing timeout

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

在R中得到图的二次方程项

我需要找到我在R中绘制的图的二次方程项.当我在excel中执行此操作时,该术语出现在图表上的文本框中,但我不确定如何将其移动到单元格以供后续使用(应用于需要校准的值)或者实际上如何在R中请求它.如果它在R中可以被召唤,它是否可以作为一个对象来进行以后的计算?

这似乎应该是R中的直接请求,但我找不到任何类似的问题.非常感谢任何人可以提供的任何帮助.

excel r formula quadratic

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

允许查看数据的SQL查询不会修改它

我正在开发一个应用程序,允许用户自己创建查询以查看其数据库中的数据.但是,规定是应用程序应该阻止对数据库中存储的表和数据进行任何修改.应用程序将使用C#编写.如何做到这一点的任何好建议?我想到的可能的想法:

  • 解析SQL以过滤可能改变数据的任何保留字(即插入,更改,等)
  • 可能存在可能阻止从此应用程序连接进行修改的设置.

任何建议阻止从此应用程序所做的任何更改,以防止任何用户错误或尝试修改数据表的可能性非常感谢.

c# sql

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

如何同时运行Windows Phone 7模拟器的多个实例?

我正在为Windows Phone 7创建一个多人游戏.如何运行模拟器的多个实例以进行调试?

windows-phone-7 windows-phone-7-emulator

6
推荐指数
2
解决办法
2464
查看次数