据我所知,async在另一个线程/进程/核心中执行一个函数并且不阻塞主线程,但总是这样吗?
我有以下代码:
async(launch::async,[]()
{
Sleep(1000);
puts("async");
});
puts("main");
Run Code Online (Sandbox Code Playgroud)
它打印async main,这是否意味着主线程等待直到async完成?
如果我改为以下:
auto f = async(launch::async,[]() // add "auto f = "
{
Sleep(1000);
puts("async");
});
puts("main");
Run Code Online (Sandbox Code Playgroud)
它打印main async.这使得看起来主要不等待async完成.
move对象之后,新旧对象之间是否存在依赖关系?int main () {
int a = 100;
std::cout<<&a<<std::endl;
auto a_copy = a; // deduced as int
std::cout<<&a_copy<<std::endl;
auto a_move = std::move(a); // deduced as int
std::cout<<&a_move<<std::endl;
};
Run Code Online (Sandbox Code Playgroud)
输出:
0x7fffffffe094
0x7fffffffe098
0x7fffffffe09c
Run Code Online (Sandbox Code Playgroud) 默认情况下,CLR在池化线程上运行任务,这对于短期运行的计算绑定工作是理想的.对于长时间运行和阻塞操作,可以按如下方式阻止使用池化线程:
Run Code Online (Sandbox Code Playgroud)Task task = Task.Factory.StartNew (() => ..., TaskCreationOptions.LongRunning);
我正在阅读关于thread和的主题task.你能解释一下"长[呃] - 跑"和"短跑"的任务是什么?
我不能创造:
shared_ptr<char> n_char = make_shared<char>(new char[size_]{});
Run Code Online (Sandbox Code Playgroud)
我该怎么创造
char* chr = new char[size_]{};
Run Code Online (Sandbox Code Playgroud)
用现代指针?
CIL是一种面向对象的汇编语言,完全基于堆栈.它的字节码被翻译成本机代码,或者 - 最常见的 - 由虚拟机执行.
为什么我们需要CIL?是不是可以将C#转换为本机代码而不是CIL?如果所有.Net语言都编译成CIL,为什么不使用C#而不是IL?CIL比C#或VB更具表现力吗?
这两个代码块都做同样的事情吗?
class A {
public static int s;
A(){}
static A(){s = 100;}
}
Run Code Online (Sandbox Code Playgroud)
和
class A {
public static int s=100;
A(){}
//static A(){s = 100;} do not use
}
Run Code Online (Sandbox Code Playgroud)
他们做同样的事情吗?我认同.
有什么不同吗?
哪种"保存/转移"功能最好?
function<void(int)> fcn =
[](int par) {std::cout<<"fcn: "<<par<<std::endl; };
void(*fcn_a)(int) =
[](int par) {std::cout<<"fcn_a: "<<par<<std::endl; };
fcn(12);
fcn_a(12);
Run Code Online (Sandbox Code Playgroud)PKcE?码:
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
string s {"IDE"};
std::cout<<typeid(s).name()<<std::endl;
auto S{"IDE"}; // why do not deduced as string?
std::cout<<typeid(S).name()<<std::endl;
auto c = {"IDE"}; // why do not deduced as string?
std::cout<<typeid(c).name()<<std::endl;
auto C {string{"IDE"}}; // why do not deduced as string?
std::cout<<typeid(C).name()<<std::endl;
auto Z = string{"IDE"};
std::cout<<typeid(Z).name()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Ss
St16initializer_listIPKcE
St16initializer_listIPKcE
St16initializer_listISsE
Ss
Run Code Online (Sandbox Code Playgroud) 大小char[]是number of char times sizeof(char),大小char*是sizeof(pointer)- 指向第一个元素的指针.
sizeof(char[])打印number of char times sizeof(char)中main(),在它的声明,但如果我通过这个数组的功能,其功能转换char[]到char*和它的imposibble获得使用数组的大小sizeof(),
"void pr(char chr[])" is changed to "void pr(char chr*)"
Run Code Online (Sandbox Code Playgroud)
代码示例:
using namespace std;
void pr(char chr[])
{
std::cout << "in pr(): " << sizeof(chr)<<"\n";
}
int main()
{
char* c;
char z[] = { 1,2,3,4,5,6,7,8,9};
c = z;
std::cout << "sizeof char* c in main(): " << sizeof(c) << "\n"; …Run Code Online (Sandbox Code Playgroud) 这段代码工作正常:
Process v = Process.GetProcessById(6752); // firefox
Console.WriteLine(v);
ProcessThreadCollection th = v.Threads;
foreach (ProcessThread pt in th)
{
var info = string.Format("-> Thread ID: {0}\tStart Time: {1}\tPriority: {2}",
pt.Id, pt.StartTime.ToShortTimeString(), pt.PriorityLevel);
Console.WriteLine(info);
}
Run Code Online (Sandbox Code Playgroud)
但是不要工作这个:
Process v = Process.GetProcessById(6752); // firefox
Console.WriteLine(v);
ProcessThreadCollection th = v.Threads;
foreach (var pt in th) // var instead of ProcessThread
{
var info = string.Format("-> Thread ID: {0}\tStart Time: {1}\tPriority: {2}",
pt.Id, pt.StartTime.ToShortTimeString(), pt.PriorityLevel);
Console.WriteLine(info);
}
Run Code Online (Sandbox Code Playgroud)
pt在第二个假定为object编译器,当然不编译.
为什么假定的元素ProcessThreadCollection作为object代替 …
c++ ×6
c# ×4
c++11 ×3
.net ×1
arrays ×1
asynchronous ×1
cil ×1
compilation ×1
concurrency ×1
pointers ×1
std-function ×1
task ×1
var ×1