小编Gro*_*roo的帖子

带有两个圆括号对的 C 函数?

我很抱歉标题不好,但除了“我不明白这段代码”之外,我没有想到更好的东西。请随时提出修改建议。

我正在阅读这段代码。我从未见过这样的 C 函数:

static void
VL_XCAT(_vl_vlad_encode_, SFX)
(TYPE * enc,
 TYPE const * means, vl_size dimension, vl_size numClusters,
 TYPE const * data, vl_size numData,
 TYPE const * assignments,
 int flags)
{
    // function body
}
Run Code Online (Sandbox Code Playgroud)

特别是我对(_vl_vlad_encode_, SFX). 据了解,我见过的所有函数头都只有一对“圆括号”(函数的参数),而这里有两对。

第一个是什么意思?我认为这是与以后的调用_vl_vlad_encode_f_vl_vlad_encode_d等不出现其他地方在库中的代码,但我不明白它们是如何连接的。

c vlfeat

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

C#与多线程共享锁

是否有一种通用的方法来"共享"在同一组数据上运行的不同对象之间的锁定?

我知道通常不建议使用公共对象进行锁定.

例如,Queue可以实现为线程安全,但是其他一些类可能需要特定的锁才能锁定多个Queue操作.如果我有第三个类,还需要在同一个Queue实例上进行多次锁定操作,会发生什么?

例如:(假设这L<T>是一个线程安全列表,只是为了保存一些输入)

class Worker
{
    private readonly L<Something> _list;
    public Worker(L<Something> list) { _list = list; }

    private readonly object _lock = new object();
    public void Replace(Something old, Something new)
    {
       lock (_lock) 
       {
          if (_list.Contains(old))
          {
              _list.Remove(old);
              _list.Add(new);
          }
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在另一个线程上的某个其他类oldif条件之后删除该元素,则list将不再包含该元素,_lock私有对象也是如此.

我应该锁定实际的列表实例吗?

c# multithreading synchronization locking

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

根据列值将数据划分到不同的表中是否合理?

如果我有一个大型表,其列具有相当有限的值范围(例如<100),将该表划分为多个名称与该列值相关联的表是否合理?

例如像列一样的表格:

table "TimeStamps": [Id] [DeviceId] [MessageCounter] [SomeData]

其中[DeviceId]是"有限范围"列将被分离成几个不同的表:

table "TimeStamps1": [Id] [MessageCounter] [SomeData]
table "TimeStamps2": [Id] [MessageCounter] [SomeData]
...
table "TimeStampsN": [Id] [MessageCounter] [SomeData]

我在原始表中遇到的问题是,为某些DeviceId值找到最大的MessageCounter值需要很长时间才能执行(参见本文).

如果表是分开的,找到最大列号应该是O(1)操作.

[编辑]

只是偶然发现了这个,以为我会更新它.通过一些正确的索引配置和预定的索引重组作业,我能够通过规范化表单获得出色的性能.我建议为每个瓶颈查询尝试SSMS 数据库引擎优化顾问工具,这对于主要工作不是数据库设计的人来说非常有帮助.

sql database database-design sql-server-2005 normalization

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

在c#中比较3个数组长度的好方法?

我有3个阵列.我必须检查这些数组是否具有相同的长度.是否有一种聪明而好的方式来比较它?

c# arrays

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

如何在C#中检查键盘或鼠标输入是否有一段时间没有

我正在尝试编写一行代码来检查键盘和鼠标是否没有输入,并且在一分钟的时间内鼠标位置没有变化.如果此条件为真,则触发事件:

if ((no_Keyboard_input) && (no_mouse_input) && (no_change_in_mousePosition))
{
    start_timer;
    if (time_elapsed == 1 min)
    {
         playAnimation;
    }
}
Run Code Online (Sandbox Code Playgroud)

c#

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

创建"在哪里"HQL查询

我在编写使用"where in"子句的HQL查询时遇到问题.

简化的类看起来像这样:

class Parent
{
    public virtual Int64 Id { get; private set; }
    public virtual string Name { get; private set; }
}

class Child
{
    public virtual Int64 Id { get; private set; }
    public virtual string Name { get; private set; }
    public virtual Parent Parent { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

使用如下定义的映射:

class ParentMap : ClassMap<Parent>
{
    Id(x => x.Id);
    Map(x => x.Name);
}

class ChildMap : ClassMap<Child>
{
    Id(x => x.Id);
    Map(x => x.Name); …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate hql where-in

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

加入的HQL路径(加入同一个表时)

我试图获得两个不同设备的测量对,加入相同的时间戳.在SQL中,这可以按预期工作:

select
  leftItem.Timestamp, leftItem.Value, rightItem.Value
from
  DataTable leftItem
  inner join DataTable rightItem
  on leftItem.Timestamp = rightItem.Timestamp
where
  leftItem.Device = 1 and rightItem.Device = 2
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将其转换为HQL:

select
  left, right 
from
  DataTable as left 
  inner join DataTable as right
  on left.Timestamp = right.Timestamp
where
  left.Device = 1 and right.Device = 2
Run Code Online (Sandbox Code Playgroud)

我得到了 NHibernate.Hql.Ast.ANTLR.SemanticException:

Path expected for join!

如何指定同一个表的"路径"?

c# sql nhibernate hql inner-join

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

CreateMutex,OpenMutex和Process sync

我正在尝试执行以下操作:

进程A应该使用OpenMutex来查看进程B是否正在运行.

进程B应该使用CreateMutex让进程A知道它正在运行.其实很简单......

这是怎么回事:

  1. 运行进程A - >它看到进程B没有运行.到现在为止还挺好.
  2. 运行进程B - >它创建互斥锁.
  3. 再次运行进程A - >它看到进程B正在运行.还好.
  4. 我关闭进程B(也应该关闭互斥锁).
  5. 运行进程A - >它仍然看到进程B正在运行!(OpenMutex不会失败).

我在这做错了什么?

这是我的代码的一部分:

// Start of process B
HANDLE hMutex = ::CreateMutex(NULL, TRUE, MY_MUTEX_NAME);
MessageBox(NULL, _T("PROCESS B !"), _T("TEST"), 0); 
CloseHandle(hMutex);
// End of process B


// Start of process A
HANDLE hMutex = ::OpenMutex(SYNCHRONIZE, FALSE, MY_MUTEX_NAME);
if(hMutex != NULL)
{
   MessageBox(NULL, _T("PROCESS B is alive !"), _T("TEST"), 0); 
}
CloseHandle(hMutex);
// End of process A
Run Code Online (Sandbox Code Playgroud)

c++ windows mutex

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

text-indent最小负值

该物业的最低允许负值是text-indent多少?

我在我的网站上使用了一个非常巨大的价值(类似的东西text-indent: -99999999px),它停止使用上一次谷歌Chrome更新.IE仍然可以正常工作,但我可能需要从那里删除几个9,以使其再次与Chrome一起使用.

免责声明:是的,这个值有点过于偏执,我用它来玩得很开心,直到今天屏幕上突然出现文字为止.但通常建议的text-indent: -9999px可能很容易在(不是那么)遥远的未来中失败?

css text-indent

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

如何强制链接器将字符串数组的const数组存储到flash(而不是RAM)中

最近我收到了一些有一些问题的遗留代码.在一些代码中,我注意到许多状态报告存储为3d char数组.踢球者是很多这个空间实际上是未使用过的.例如:

const char txt[<60>][6][150] =
{
    {"This is a very very long string of text", "The others are empty", "", "", "", ""},
    {"The text is different, but similarly a lot of unused space", etc...}
};
Run Code Online (Sandbox Code Playgroud)

(60不存在,但有60个条目).

然后使用以上声明通过QSPI将此代码放入闪存中

__attribute__((section(".ExtQSPIFlashSection")))
Run Code Online (Sandbox Code Playgroud)

此部分在链接器中定义如下:

QSPI (rx)       : ORIGIN = 0x90000000, LENGTH = 64M
.ExtQSPIFlashSection : { *(.ExtQSPIFlashSection) } >QSPI
Run Code Online (Sandbox Code Playgroud)

作为一种更有效的内存方法,我想重写它:

const char **txt[] =
{
    (const char*[]) {"This is a very very long string of text", "The others are empty", "", "", "", …
Run Code Online (Sandbox Code Playgroud)

c embedded linker arm stm32

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