我有一个非常IO密集的计划任务(删除数十万个文件).出于磁盘空间原因,必须快速执行此作业.在win2k8上,计划任务的IO优先级始终较低.提高流程的优先级并未改变IO优先级.有没有办法让计划任务具有正常的IO优先级?
编译器错误CS0283表示只能将基本POD类型(以及字符串,枚举和空引用)声明为const
.有没有人有关于这种限制的理由的理论?例如,能够声明其他类型的const值(例如IntPtr)会很好.
我相信这个概念const
实际上是C#中的语法糖,它只是用文字值替换了名称的任何用法.例如,给定以下声明,在编译时对Foo的任何引用都将替换为"foo".
const string Foo = "foo";
Run Code Online (Sandbox Code Playgroud)
这将排除任何可变类型,因此他们可能选择此限制而不必在编译时确定给定类型是否可变?
我对本地化编程很新,我正在试图弄清楚如何为新启动的非托管C++应用程序(从应用程序内部)设置正确的初始区域设置.
据我所知,新的应用程序从C语言环境开始,而不是从适当的区域语言环境(英语,德语等)开始.所以我需要做的是调用setlocale( LC_ALL, "???" )
,但我不确定如何为第二个参数获取正确的值.它将类似于"英语"或"德语:德国" - 基本上是用户通过"区域和语言选项"控制面板设置的区域设置.为了清楚起见,我不是在寻找如何格式化语言环境字符串,我正在为运行应用程序的计算机寻找正确的语言环境字符串.
我猜测有一些Win32 API会给我这个,或者可能是一个包含正确值的注册表项.有人知道我应该做什么吗?
无论何时打开表单,系统都会自动为您控制其中一个控件.据我所知,根据Windows标准行为,获得焦点的控件是Tab键顺序中的第一个启用控件.
问题是如何在运行时更改此功能,而无需动态重新调整Tab键顺序.例如,某些表单可能希望根据程序逻辑改变最初聚焦的控件,以便将焦点放在最合适的控件中.如果您只是将其他控件集中在OnLoad
处理程序中,则默认逻辑仍会执行并重新聚焦默认控件.
如果您使用C/C++编写并使用原始窗口过程或MFC,则可以FALSE
从WM_INITDIALOG
处理程序返回0(),并跳过默认的聚焦逻辑.但是,我无法在Windows窗体中找到任何方法.我提出的最好的方法是BeginInvoke
在OnLoad
完成后设置焦点,如下所示:
protected override void OnLoad( System.EventArgs e )
{
base.OnLoad( e );
// ... code ...
BeginInvoke( new MethodInvoker( () => this.someControl.Focus() ) );
}
Run Code Online (Sandbox Code Playgroud)
必须有一些正确的方法来做到这一点 - 它是什么?
我有两个PowerShell函数,第一个调用第二个函数.它们都带有N个参数,其中一个被定义为简单地添加一个标志并调用另一个.以下是示例定义:
function inner
{
foreach( $arg in $args )
{
# do some stuff
}
}
function outer
{
inner --flag $args
}
Run Code Online (Sandbox Code Playgroud)
用法看起来像这样:
inner foo bar baz
Run Code Online (Sandbox Code Playgroud)
或这个
outer wibble wobble wubble
Run Code Online (Sandbox Code Playgroud)
目标是后一个例子等同于
inner --flag wibble wobble wubble
Run Code Online (Sandbox Code Playgroud)
问题:inner
如此处所定义,后者实际上导致传递两个参数:第一个是"--flag",第二个是包含"wibble","wobble"和"wubble"的数组.我想要的是inner
接收四个参数:标志和三个原始参数.
所以我想知道的是如何说服powershell在传递它之前扩展$ args数组inner
,将其作为N个元素而不是单个数组传递.我相信你可以使用splatting运算符(*字符)在Ruby中执行此操作,我很确定PowerShell可以做到这一点,但我不记得如何.
我正在使用Powershell通过任务调度程序2.0接口(例如ITaskDefinition)通过COM与Windows 7任务调度程序服务进行通信.我想从ITaskDefinition上的Triggers集合中提取一个特定的触发器.似乎提取特定触发器的正确方法是通过Item属性,它是一个索引属性.
我的第一次尝试看起来像这样:
$sched = New-Object -Com "Schedule.Service"
$sched.Connect()
$folder = $sched.GetFolder('\')
$task = $folder.GetTask("some task")
$triggers = $task.Definition.Triggers
$trigger = $triggers[0]
Run Code Online (Sandbox Code Playgroud)
但是,最后一行失败并显示以下消息:
Unable to index into an object of type System.__ComObject.
Run Code Online (Sandbox Code Playgroud)
我在这个主题上尝试过其他一些变化,例如$triggers.Item(0)
,一切都没有运气.我猜这与$trigger
作为COM对象有关,因为我认为索引属性在其他类型上运行良好.
有谁知道这样做的正确方法?
我想Foo
从函数返回一个不可复制的类型对象.这基本上是一个辅助对象,调用者将使用它来执行一组操作,析构函数在操作完成后执行一些清理.
在rvalue引用出现之前,我会返回一个shared_ptr<Foo>
或类似的东西.使用rvalue引用,另一个选项是使构造函数和复制构造函数成为私有,并使唯一的公共构造函数成为移动构造函数.Foo
看起来像这样:
class Foo : boost::noncopyable
{
private:
Foo( /* whatever the real ctor needs */ );
public:
Foo( Foo && src );
// ... interesting stuff ...
};
Foo a( SomethingThatReturnsFoo() ); // allowed
Foo b; // error, no public default constructor
Foo c( a ); // error, noncopyable
Foo d = a; // error, noncopyable
Run Code Online (Sandbox Code Playgroud)
我的问题是,这样做是否不好,或者看起来是否合理.我想不出有什么理由会导致问题或者难以阅读,但是当涉及到rvalue引用时,我仍然是一个新手,所以可能会考虑我没想到的.
我正在尝试使用LsaLogonUser创建交互式登录会话,但它始终返回STATUS_INVALID_INFO_CLASS
(0xc0000003).从我在网上搜索中发现,KERB_INTERACTIVE_LOGON
结构的内存布局很棘手,但我很确定我已经做到了.
我也尝试使用MSV1.0而不是Kerberos,MSV1_0_INTERACTIVE_LOGON
用于身份验证结构和MSV1_0_PACKAGE_NAME
包名称,但是失败了STATUS_BAD_VALIDATION_CLASS
(0xc00000a7).
谁能告诉我这里做错了什么?这是代码,大部分错误处理都被剥离了.显然,这不是生产质量; 我只想尝试一个工作样本.
// see below for definitions of these
size_t wcsByteLen( const wchar_t* str );
void InitUnicodeString( UNICODE_STRING& str, const wchar_t* value, BYTE* buffer, size_t& offset );
int main( int argc, char * argv[] )
{
// connect to the LSA
HANDLE lsa;
LsaConnectUntrusted( &lsa );
const wchar_t* domain = L"mydomain";
const wchar_t* user = L"someuser";
const wchar_t* password = L"scaryplaintextpassword";
// prepare the authentication info
ULONG authInfoSize …
Run Code Online (Sandbox Code Playgroud) 所述用于MSDN文档sys.database_permissions
说,状态栏可以是“G”,“d”,“R”,或“W”。'R' 值有一个 'REVOKE' 的描述,这听起来像是具有该值的行对应于已撤销的权限。然而,尽我可以告诉的文档的REVOKE
,撤销权限完全删除它,所以我希望这只是从删除行sys.database_permissions
。这就是我测试授予然后撤销许可时发生的情况;在GRANT
该权限显示在该视图中之后,以及在REVOKE
它消失之后。
我的问题:在什么情况下这个视图会包含状态设置为“R”的行?我问这个是因为我不确定在代码中检查这个视图时是否需要处理“R”行。
我可以想到一些可能发生这种情况的潜在场景,但还没有找到任何确认:
REVOKE
命令时可能会非常短暂地出现,然后整行消失。我没有观察到这一点,但大概只有一个很小的时间窗口才会出现。这可能是一个C++ 101问题:我很好奇的准则是使用size_t
和offset_t
,如他们的目的是什么情况了,什么情况下,他们不打算等我没有做很多便携式编程的,所以我也通常只是用类似int
或unsigned int
数组大小,索引等.但是,我认为最好在可能的情况下使用其中一些更标准的typedef,所以我想知道如何正确地做到这一点.
作为后续问题,对于使用Visual Studio 2008在Windows上进行开发,我应该在哪里查找实际的typedef?我发现size_t
在VS安装目录中的多个头文件中定义了,所以我不确定我应该使用哪些头文件,而且我找不到offset_t
任何地方.
c++ ×3
powershell ×2
windows ×2
.net ×1
arrays ×1
c# ×1
c++11 ×1
com ×1
constants ×1
locale ×1
localization ×1
permissions ×1
sql ×1
sql-server ×1
winforms ×1