问题列表 - 第41964页

在实现时间受限的方法时,我应该中止工作线程还是让它运行?

我目前正在为现有应用程序编写基于Web服务的前端.为此,我使用WCF LOB适配器SDK,它允许创建自定义WCF绑定,将外部数据和操作公开为Web服务.

SDK提供了一些实现的接口,并且它们的一些方法是时间约束的:实现期望在指定的时间跨度内完成其工作或抛出TimeoutException.

调查让我想到了" 实现C#通用超时 "的问题,明智地建议使用工作线程.有了这些知识,我可以写:

public MetadataRetrievalNode[] Browse(string nodeId, int childStartIndex,
    int maxChildNodes, TimeSpan timeout)
{
    Func<MetadataRetrievalNode[]> work = () => {
        // Return computed metadata...
    };

    IAsyncResult result = work.BeginInvoke(null, null);
    if (result.AsyncWaitHandle.WaitOne(timeout)) {
        return work.EndInvoke(result);
    } else {
        throw new TimeoutException();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果工作线程超时,则不清楚如何处理工作线程.人们可以忘记它,就像上面的代码那样,或者可以中止它:

public MetadataRetrievalNode[] Browse(string nodeId, int childStartIndex,
    int maxChildNodes, TimeSpan timeout)
{
    Thread workerThread = null;
    Func<MetadataRetrievalNode[]> work = () => {
        workerThread = Thread.CurrentThread;
        // Return computed …
Run Code Online (Sandbox Code Playgroud)

c# multithreading wcf-lob-adapter

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

如何从普通实体迁移到自我追踪实体?

我正在使用.NET Entity Framework 4和EntityObjects的项目.既然我们发现我们需要演变为尚未实现的其余模块的自我跟踪实体,我想问一下:

1)我们可以删除现有的普通实体并从数据库中重新生成自我跟踪实体,而无需使用它们修改我们当前编写的代码吗?

2)如果1)的答案为"是",那么这很容易吗?您将如何从第一个方案迁移到第二个方案?

.net c# orm entity-framework-4

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

在 .NET Platform Invoke 中使用不安全的 struct * 作为不透明类型而不是 IntPtr 是否有效?

.NET Platform Invoke 提倡将指针类型声明为 IntPtr。例如,以下

[DllImport(“mylib”)]
静态 extern IntPtr get_foo();

[DllImport(“mylib”)]
静态 extern void do_something_foo(IntPtr foo);

然而,我发现,当与具有许多指针类型的有趣本机接口交互时,将所有内容扁平化为 IntPtr 会使代码非常难以阅读,并消除编译器可以执行的典型类型检查。

我一直在使用一种模式,将不安全的结构声明为不透明的指针类型。我可以将此指针类型存储在托管对象中,编译器可以为我对其进行类型检查。例如:

类 Foo {
   不安全的结构 FOO {};// 不透明类型
   不安全的 FOO *my_foo;

   类如果{
     [DllImport(“mydll”)]
     extern static unsafe FOO* get_foo();

     [DllImport(“mydll”)]
     extern static unsafe void do_something_foo(FOO *foo);
   }

   公共不安全 Foo() {
     this.my_foo = if.get_foo();     
   }
   公共不安全 do_something_foo() {
     if.do_something_foo(this.my_foo);
   }

注意:我并不是想整理一个结构。DLL 提供了一个不透明的指针,我不应该触及它,我只需要将它提供给将来对 DLL 的调用。

我知道已发布的执行此操作的方法是 IntPtr,但我不喜欢使用非类型化指针。当有多种指针类型在托管代码和本机代码之间移动时,使用 IntPtrs 是非常危险的。使用我的不透明结构指针类型进行类型检查是天赐之物。

我在实践中使用这种技术没有遇到任何问题。然而,我还没有看到任何人使用这种技术的例子,我想知道为什么。是否有任何原因导致上述代码在 .NET 运行时看来无效?

我的主要问题是.NET GC 系统如何处理“不安全的 FOO *my_foo”。我的希望是,因为底层类型是一个结构体,并且它被声明为不安全,所以 GC 会忽略它。

GC 系统是否会尝试跟踪该指针,或者只是忽略它?使用我的技术代替 IntPtr 安全吗?

c# pinvoke

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

如何清空android中的sharedpreferences存储?

我正在使用 sharedPreferences 来存储用户名和密码 .. 但我需要注销,我如何删除用户名和密码的数据?

android

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

在方法中传递ref并且在C#中没有ref时有什么区别?

可能重复:
何时传递ref关键字

大家好,

我很惊讶我们为什么ref在C#中默认情况下,C#中的所有引用类型都作为引用传递.

简单来说,任何人都可以解释这两个方法调用之间的区别:

public void Test(SomeClass someClass)
{
  // some code here
} 
Run Code Online (Sandbox Code Playgroud)

public void Test(ref SomeClass someClass)
{
  // some code here
}
Run Code Online (Sandbox Code Playgroud)

在我的想法中,他们都参考了相同的内存位置.

那么为什么我们需要ref关键词呢?

c#

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

Ada中的二次方程

我刚走过来,决定尝试一下Ada.缺点是语法和功能远离C++.所以我不得不喜欢各种各样的东西让这件事情起作用.

我的问题是,如果有更好的方法来做这个计算,我在这里做了什么

   IF(B < 0.0) THEN
      B := ABS(B);
      X1 := (B / 2.0) + Sqrt( (B / 2.0) ** 2.0 + ABS(C));
      X2 := (B / 2.0) - Sqrt( (B / 2.0) ** 2.0 + ABS(C));
   ELSE
      X1 := -(B / 2.0) + Sqrt( (B / 2.0) ** 2.0 - C);
      X2 := -(B / 2.0) - Sqrt( (B / 2.0) ** 2.0 - C);
   END IF;
Run Code Online (Sandbox Code Playgroud)

我有一些负数的问题,这就是为什么我做了一个IF语句并使用ABS()将它们转为正数.但奇怪的是它适用于另一种情况,这很奇怪......

math ada

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

JavaScript枚举示例 - 这是如何工作的?

这段代码来自这个答案.

我试图了解它是如何工作的,但我并没有得到它.

我认为发生的是TEST_ERROR是一个闭包,因此无法更改ErrorValue.一个人会引用这样的值:TEST_ERROR.SUCCESS.如果其中任何一个陈述不正确,请纠正我.

我不明白的是返回声明正在做什么.它返回一个由不同的ErrorValues组成的对象,但是将它返回到什么状态?它是从什么回来的?什么时候被召唤?

var TEST_ERROR = (function() {
  function ErrorValue(value, friendly) {
    this.value = value;
    this.friendly = friendly;
  }
  ErrorValue.prototype = {
    toString: function() { return this.friendly; },
    valueOf: function() { return this.value; }
  };
  return {
    'SUCCESS': new ErrorValue(0, 'Success'),
    'FAIL': new ErrorValue(1, 'Fail'),
    'ID_ERROR': new ErrorValue(2, 'ID error')
  };
})(); 
Run Code Online (Sandbox Code Playgroud)

谢谢!

保罗

javascript enums closures

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

多对多表应该有主键吗?

如果我有两个具有多对多关系的对象,我通常会在我的数据库模式中使用多对多表对它们进行建模,以将两者关联起来.但是,多对多表(或"连接表")是否有自己的主键(整数自动递增)?

例如,我可能有表A和B,每个表都有一个ID,还有一个名为A_B的表,其外键元组为(A_ID,B_ID).但是A_B是否应该拥有自己的主键自动递增ID列?

添加它有什么优缺点?我个人喜欢用于多对多连接的自然键.但主要关键是增加了什么?

database many-to-many database-agnostic

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

mysql 查询中的 Concat()

我在 mysql 查询中连接字符串时遇到问题。

这是我的查询:

SELECT *, CONCAT(nombre,' ',apellido) AS fullname FROM user WHERE nombre LIKE '%$busqueda%' OR apellido LIKE '%$busqueda%' OR email LIKE '%$busqueda%' OR about LIKE '%$busqueda%' OR place LIKE '%$busqueda%' or fullname LIKE '%$busqueda%'
Run Code Online (Sandbox Code Playgroud)

但是查询失败: Query failed: Unknown column 'fullname' in 'where clause'

可能只是一个语法错误,谢谢

php mysql concatenation

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

Python/Javascript - 整数按位排他或问题

我精通两种语言......但我遇到整数按位异或逻辑运算符的问题.在javascript中,它给了我一个结果,在python中它给了我另一个..

继续,打开python并执行(-5270299)^ 2825379669

现在使用javascript,进行相同的计算,并提醒结果或其他任何内容(例如http://thorat.org/OS/js.php)

结果不同!我不知道为什么!

我肯定错过了什么.

javascript python integer bit-manipulation xor

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