我使用DefaultMutableTreeNode,它有方法depthFirstEnumeration(),breadthFirstEnumeration()并children()返回Enumeration树节点.
我需要使用返回Enumeration多次,但我找不到任何方法就像reset()在Enumeration.似乎我只能获得所有元素一次,然后depthFirstEnumeration()再次调用以获得新元素Enumeration,这似乎不是一个好的解决方案.
当然,我可以从中获取所有元素Enumeration并将其转换为任何其他可重用的表示形式,但是真的有Enumeration多种方法可以使用吗?
我想设置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)
但它不起作用.还有其他方法可以做到这一点吗?
需要说明的是:我主要是嵌入式内容,即它是C和微控制器中的某种实时内核; 但实际上这个问题应该与平台无关.
我读过Michael Barr的好文章:Mutexes和Semaphores Demystified,以及StackOverflow上的相关答案.我清楚地理解二进制信号量是什么,以及互斥量是什么.那很棒.
但说实话,我从来不知道,仍然无法理解,所谓的计数信号量(即最大计数> 1的信号量)是为了什么.在什么情况下我应该使用它?
很久以前,在我读过迈克尔·巴尔的上述文章之前,我已经说过" 你可以使用它,就像有一定数量的床的酒店房间一样.床的数量是最大的数量.信号量,就像那个房间的一些按键 ".
这可能听起来很不错,但实际上我的编程练习中从来没有这种情况(并且无法想象),迈克尔巴尔说这种方法是错误的,他似乎是对的.
然后,在我读完这篇文章后,我认为它可能会在我拥有某种FIFO缓冲区时使用.假设缓冲区的容量是10个元素,我们有两个任务:A(生产者)和B(消费者).然后:
signal就是信号量.wait就是信号量.好吧,但它不起作用:
signal在放入新数据之前调用(signal然后应该能够等到最大计数<最大计数)?如果是这样,信号量将在数据实际放入FIFO之前发出信号,这是错误的.那么,我什么时候应该使用那个野兽,计数信号量呢?
据我了解,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) 编辑:请注意:我完全重新解释了我的问题.
我的应用程序有两个Activites:一个和乙.Activity A是MAIN.因此,应用程序启动,屏幕上出现A. 用户按下按钮,屏幕上出现新的Activity B.
所以,现在有在我的"回栈" 2个活动:一个和乙.
现在我按"Home"键,然后点击我的应用程序在启动器上的图标:Activity B出现在屏幕上(而不是A),只要它是我的任务中的顶级活动.
现在问:我怎样才能Intent同样打开目前最重要Activity的任务?
我需要它用于Notification:当用户点击我的时Notification,Activity此任务的顶部应出现在屏幕上,而不是指定的任务.
我尝试了许多Intent标志,比如SINGLE_TOP和其他标志,但我仍然无法得到我需要的东西.
有谁知道解决方案?
我正试图从网络中获取地理定位:
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连接和复选框" 使用无线网络 ".
我怎么能这样做?
谢谢.
我正在将实时内核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编译器,它应该扩展为空;我正在努力深入了解如何编写副本并移动构造函数和赋值运算符.
在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) 我正在从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也没有定义.
android ×2
arm ×1
c ×1
c++ ×1
c++11 ×1
console.log ×1
enumeration ×1
geolocation ×1
java ×1
keil ×1
left-join ×1
networking ×1
qjsengine ×1
qt ×1
recursion ×1
semaphore ×1
struct ×1
vim ×1