小编Dmi*_*ank的帖子

Java:多次使用Enumeration

我使用DefaultMutableTreeNode,它有方法depthFirstEnumeration(),breadthFirstEnumeration()children()返回Enumeration树节点.

我需要使用返回Enumeration多次,但我找不到任何方法就像reset()Enumeration.似乎我只能获得所有元素一次,然后depthFirstEnumeration()再次调用以获得新元素Enumeration,这似乎不是一个好的解决方案.

当然,我可以从中获取所有元素Enumeration并将其转换为任何其他可重用的表示形式,但是真的有Enumeration多种方法可以使用吗?

java enumeration

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

Vim:在C中,将结构名称突出显示为cType

我想设置Vim以突出显示struct名称为C类型,所以,我已经在语法脚本上乱了一点:

syn match cType   "\v(struct\s+)@<=[a-zA-Z0-9_]+"
syn match cType   "\v(enum\s+)@<=[a-zA-Z0-9_]+"
Run Code Online (Sandbox Code Playgroud)

它有效,但它显着减慢了我的vim!正如我刚刚打字的那样,Vim对Intel Core2 Duo 2.53 GHz的响应速度要小得多.

我已经评论了我的添加内容,现在它再次运行得很快.

因此,似乎\@<=regexp构造太慢而无法在语法脚本中使用.我试着将它与struct自己匹配:

syn match cType   "\vstruct\s+[a-zA-Z0-9_]+"
Run Code Online (Sandbox Code Playgroud)

但它不起作用.还有其他方法可以做到这一点吗?

vim struct syntax-highlighting

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

计算信号量的用例

需要说明的是:我主要是嵌入式内容,即它是C和微控制器中的某种实时内核; 但实际上这个问题应该与平台无关.

我读过Michael Barr的好文章:Mutexes和Semaphores Demystified,以及StackOverflow上的相关答案.我清楚地理解二进制信号量是什么,以及互斥量是什么.那很棒.

但说实话,我从来不知道,仍然无法理解,所谓的计数信号量(即最大计数> 1的信号量)是为了什么.在什么情况下我应该使用它?

很久以前,在我读过迈克尔·巴尔的上述文章之前,我已经说过" 你可以使用它,就像有一定数量的床的酒店房间一样.床的数量是最大的数量.信号量,就像那个房间的一些按键 ".

这可能听起来很不错,但实际上我的编程练习中从来没有这种情况(并且无法想象),迈克尔巴尔说这种方法是错误的,他似乎是对的.

然后,在我读完这篇文章后,我认为它可能会在我拥有某种FIFO缓冲区时使用.假设缓冲区的容量是10个元素,我们有两个任务:A(生产者)和B(消费者).然后:

  • 信号量的最大计数应设置为10;
  • 当A想要将数据放入缓冲区时,它signal就是信号量.
  • 当B想要从缓冲区获取数据时,它wait就是信号量.

好吧,但它不起作用:

  • 如果A试图将新数据放入FIFO,但没有空间怎么办?如何等待这个地方:它应该signal在放入新数据之前调用(signal然后应该能够等到最大计数<最大计数)?如果是这样,信号量将在数据实际放入FIFO之前发出信号,这是错误的.
  • 信号量不足以实现正确的同步:FIFO本身也需要同步.然后,它产生经典的TOCTTOU问题:信号量已经发信号或等待时有一段时间,但FIFO尚未修改.

那么,我什么时候应该使用那个野兽,计数信号量呢?

multithreading operating-system semaphore

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

左联接和.includes()

据我了解,Rails执行a的唯一方法LEFT JOIN是手动编写SQL,如下所示:

Company.joins('LEFT JOIN people ON companies.id = people.company_id')
Run Code Online (Sandbox Code Playgroud)

但是,然后联接其他表并使用它也变得非常棘手.includes(:people)

我需要使用,.includes(:people)因为否则,无论何时我访问people方法,Rails都会生成其他的db请求(相关问题:连接表时,无论如何,Rails在访问已连接表中的字段时都会发出附加请求

因此,这可行:

Company.joins('LEFT JOIN people ON companies.id = people.company_id')
Run Code Online (Sandbox Code Playgroud)

这有效:

Company.joins('LEFT JOIN people ON companies.id = people.company_id')
      .includes(:people)
Run Code Online (Sandbox Code Playgroud)

这有效:

Company.joins('LEFT JOIN people ON companies.id = people.company_id')
      .includes(:people).joins(:city)
Run Code Online (Sandbox Code Playgroud)

不起作用

Company.joins('LEFT JOIN people ON companies.id = people.company_id')
      .includes(:people).joins(:city).includes(:city)
Run Code Online (Sandbox Code Playgroud)

它最终加入了people两次,当然db抱怨列名不明确:people.id

生成的SQL是:

SELECT "companies"."id" AS t0_r0, "companies"."title" AS t0_r1, 
"companies"."address" AS t0_r2, "companies"."city_id" AS t0_r3, 
"companies"."created_at" AS t0_r4, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails left-join

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

Android:点击通知时始终启动热门活动

编辑:请注意:我完全重新解释了我的问题.

我的应用程序有两个Activites:一个.Activity AMAIN.因此,应用程序启动,屏幕上出现A. 用户按下按钮,屏幕上出现新的Activity B.

所以,现在有在我的"回栈" 2个活动:一个.

现在我按"Home"键,然后点击我的应用程序在启动器上的图标:Activity B出现在屏幕上(而不是A),只要它是我的任务中的顶级活动.

现在问:我怎样才能Intent同样打开目前最重要Activity的任务?

我需要它用于Notification:当用户点击我的时Notification,Activity此任务的顶部应出现在屏幕上,而不是指定的任务.

我尝试了许多Intent标志,比如SINGLE_TOP和其他标志,但我仍然无法得到我需要的东西.

有谁知道解决方案?

notifications android android-activity

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

Android:如果通过WiFi连接手机,则无法从网络获取地理位置

我正试图从网络中获取地理定位:

boolean network_enabled = false;
LocationManager lm;
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

try{
   network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex){
   Log.v("my_log_tag", "network location exception: " + ex.toString());
}

if(network_enabled){
   lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
}
Run Code Online (Sandbox Code Playgroud)

如果我的手机只通过手机网络连接,它的效果很好,但我有一个问题:如果我的手机不仅通过手机网络连接,而且连接到某些WiFi接入点(比如我的家庭接入点),那么我收到的不是地点.似乎Android尝试使用我的WiFi接入点获取地理位置,但当然不能.如何让Android从手机网络获取位置并忽略任何WiFi连接?

我当然知道这是可能的,因为,例如,Yandex Maps应用程序做得很好.

我需要再说一个细节:即使我没有启用复选框设置 - > 位置和安全性 - > 使用无线网络,此Yandex地图应用程序也可以通过网络接收地理位置.我不知道它是如何工作的,但也许它使用完全不同的方法.

事实是:如果我启用了GPS,它会使用GPS.如果我禁用了GPS,但启用了蜂窝网络连接,则它使用网络进行地理定位,独立于WiFi连接和复选框" 使用无线网络 ".

我怎么能这样做?

谢谢.

networking android geolocation

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

Keil ARM C编译器:内联函数的麻烦

我正在将实时内核TNeoKernel移植到Cortex-M架构,所以我安装了Keil并且正在尝试构建内核.但是,我遇到了意想不到的问题:编译器似乎无法处理inline函数.这是简单的代码:

static inline int test(void)
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器的输出如下:

src\appl\main.c(17): warning:  #260-D: explicit type is missing ("int" assumed)
  static inline int test(void)
src\appl\main.c(17): error:  #65: expected a ";"
  static inline int test(void)
Run Code Online (Sandbox Code Playgroud)

如果我删除inline关键字,它会编译并运行.

在ARM编译器的文档中,我找不到任何关于inline函数的信息.因此,只是为了确保:inlineARM编译器是否真的不支持该关键字?这太令人难以置信所以我决定问.

static inline在内核的独立于平台的代码中有很多函数,那么,它支持ARM编译器的最佳方法是什么?在我的头脑中,我只有两个想法:

  • 创建与体系结构相关的宏TN_INLINE,对于ARM编译器,它应该扩展为空;
  • 将非常小的1行函数转换为宏.

c arm inline-functions keil

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

在移动赋值中使用std :: swap()会导致无限递归(和原因),但它是Stroustrup的书中的一个例子

我正在努力深入了解如何编写副本并移动构造函数和赋值运算符.

在Bjarne Stroustrup的"The C++ Programming Language - 2013"​​中,我看到了以下移动构造函数和移动赋值的示例:

template<class T, class A>
vector_base<T,A>::vector_base(vector_base&& a)
   : alloc{a.alloc},
   elem{a.elem},
   space{a.space},
   last{a.space}
{
   a.elem = a.space = a.last = nullptr; // no longer owns any memory
}

template<class T, class A>
vector_base<T,A>::& vector_base<T,A>::operator=(vector_base&& a)
{
   swap(?this,a);
   return *this;
}
Run Code Online (Sandbox Code Playgroud)

(旁注:书中似乎有一个拼写错误:::&应该是正确的&,对吧?)

我怀疑它应该导致无休止的递归,因为std::swap()调用移动赋值运算符:

template<typename T>
void swap(T& lhs, T& rhs)
{
  auto temp(lhs);
  lhs = std::move(rhs);
  rhs = std::move(temp);
}
Run Code Online (Sandbox Code Playgroud)

我查了一下,这是一个非常简单的程序:

#include <iostream>
using namespace std;

class …
Run Code Online (Sandbox Code Playgroud)

c++ recursion move-semantics c++11

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

QJSEngine:打印到控制台

我正在从QScriptEngine(已被弃用)转移到QJSEngine,我发现我无法使用print:

  QJSEngine engine;

  QJSValue val = engine.evaluate(
        "print('123');"
        );

  if (val.isError()){
     qDebug() << "error: " << val.toString();
  }

  qDebug() << "val: " << val.toVariant();
Run Code Online (Sandbox Code Playgroud)

输出是:

error:  "ReferenceError: print is not defined"
Run Code Online (Sandbox Code Playgroud)

QScriptEngine它的作品.

然后,打印控制台的方式是什么QJSEngine?在文档中找不到任何内容.我尝试使用console.log,但console也没有定义.

qt qjsengine console.log

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