我已经了解了.NET Standard和.NET Core之间的区别,但我真的不知道区别是什么,或者何时选择.NET标准库项目以及何时选择.NET Core库项目.
我已经读过.NET Standard是为了确保一组API始终可用,无论使用哪个平台(只要该平台与我选择的.NET标准版本兼容).如果我没有弄错的话,这意味着我可以创建一个.NET Standard类库,然后在任何与我选择的.NET Standard版本兼容的平台上使用它.
使用.NET Core,我已经读过它也是为了跨平台使用,所以如果我选择一个.NET Core库,我似乎也可以在许多平台上使用它,就像.NET Standard一样.
所以最后,我没有看到差异.我什么时候应该使用哪个?他们之间有什么区别?
我正在尝试使用Qt的NFC模块在我的Android手机上阅读NFC标签.
根据这个页面,Qt将从5.6版开始支持Android上的NFC.此版本尚未发布,因此我按照此页面上的说明从源代码构建它,并将其安装在Qt创建器中.
第一步是让标签/卡检测工作,我就卡在那里.我的测试应用程序实例化a QNearFieldManager,检查NFC是否可用并将插槽连接到信号targetDetected和targetLost.该QNearFieldManager::isAvailable方法报告NFC可用(Qt 5.5没有),但信号targetDetected/ targetLost从未被触发.
以下是我的测试应用程序的代码:
#include <QLabel>
#include <QVBoxLayout>
#include <QNearFieldManager>
#include <QNearFieldTarget>
#include <QDebug>
#include "window.h"
Window::Window(QWidget *parent)
: QWidget(parent)
{
nfcLabel_ = new QLabel(this);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(nfcLabel_, 1);
setLayout(mainLayout);
setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
setWindowTitle(tr("NFC Test"));
nfc_ = new QNearFieldManager(this);
if (nfc_->isAvailable()) {
nfcLabel_->setText("NFC available");
} else {
nfcLabel_->setText("NFC not available");
qWarning() << "NFC not available";
}
nfc_->setTargetAccessModes(QNearFieldManager::NdefReadTargetAccess); // doesn't help
nfc_->registerNdefMessageHandler(this, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Raspberry pi 2 B中的QtMediaPlayer播放视频.源代码如下:
QMediaPlayer *media;
QVideoWidget *video;
...
...
media = new QMediaPlayer(parent);
video = new QVideoWidget(parent);
media->setVideoOutput(video);
media->setMedia(QUrl::fromLocalFile("/home/pi/Desktop/test3.mp4"));
media->play();
Run Code Online (Sandbox Code Playgroud)
但结果是一个空白的视频屏幕,并出现以下错误:
** (Bus:2148): WARNING **: ffmpegcolorspace-vo: size 1105920 is not a
multiple of unit size 829440
Error: "GStreamer encountered a general stream error."
Run Code Online (Sandbox Code Playgroud)
系统信息
运行最新的raspbian Jessie OS,已安装的Qt5.3,已安装的gstreamer0.10-plugins-good/bad/ugly/ffmpeg和已安装的Mpeg-2许可证
这是视频test3.mp4
我在安装了Qt5的Windows中运行此代码; 它在那里工作.但它不适用于Raspberry pi.请告诉我这里我缺少什么.
从壳牌尝试管道
我在Visual Studio Android模拟器(2016年4月发布)中有一个Android Marshmallow设备,它启动正常,似乎工作.但是,在运行时,该XDE.exe过程会占用我的CPU(35-40%+),而Hyper-V仅使用~8-10%最大值.
这是正常和预期的行为吗?如果没有,我该如何解决?
我能够跟踪以下DLL的高CPU使用率:
C:\ Program Files(x86)\ Microsoft XDE\10.0.10586.0\Plugins\Microsoft.VisualStudio.Emulator.XdePlugin.dll
...以及运行此方法的以下线程,这是一个循环:
Microsoft.VisualStudio.Emulator.StatusCallback.XdeDeviceStatusCallbackService.StatusCallbackThreadProc()
运行Windows 10移动模拟器映像时,我没有看到XDE的高CPU使用率.
有不同的调用约定在C/C++提供:stdcall,extern,pascal,等有多少这样的调用约定是可用的,什么分别意味着?有没有描述这些的链接?
根据Microsoft的说法,从Windows 10开始,使用共享模式WASAPI的应用程序可以请求小于10毫秒的缓冲区大小(请参阅https://msdn.microsoft.com/en-us/library/windows/hardware/mt298187%28v=vs. 85%29.aspx).
根据这篇文章,实现如此低的延迟需要一些驱动程序更新,我做了.使用独占模式渲染和捕获流,我测量了大约13ms的总往返延迟(使用硬件环回电缆).这告诉我,至少有一个端点成功实现了<10ms的延迟.(这个假设是正确的吗?)
文章提到应用程序可以使用新IAudioClient3界面查询Windows音频引擎使用的最小缓冲区大小IAudioClient3::GetSharedModeEnginePeriod().但是,此功能总是在我的系统上返回10ms,并且任何尝试使用任一IAudioClient::Initialize()或IAudioClient3::InitializeSharedAudioStream()低于10ms的周期初始化音频流总是会导致AUDCLNT_E_INVALID_DEVICE_PERIOD.
为了确保,我还禁用了音频驱动程序中的任何效果处理.我错过了什么?甚至可以从共享模式获得低延迟?请参阅下面的示例代码.
#include <windows.h>
#include <atlbase.h>
#include <mmdeviceapi.h>
#include <audioclient.h>
#include <iostream>
#define VERIFY(hr) do { \
auto temp = (hr); \
if(FAILED(temp)) { \
std::cout << "Error: " << #hr << ": " << temp << "\n"; \
goto error; \
} \
} while(0)
int main(int argc, char** argv) {
HRESULT hr;
CComPtr<IMMDevice> device;
AudioClientProperties props;
CComPtr<IAudioClient> client;
CComPtr<IAudioClient2> client2;
CComPtr<IAudioClient3> client3; …Run Code Online (Sandbox Code Playgroud) 在过去的几天里,我一直在调试一个涉及C++中lambdas的奇怪问题.我已将问题减少到以下症状:
this指针被破坏拉姆达内(注:this总是被复制捕获,因此拉姆达应该得到自己的this指针,它指向的App对象)std::coutprint语句时发生,并在创建lambda之前调用.print语句看似完全不相关(例如print"Hello!").printf()也表现出相同的行为.x86体系结构编译器编译并运行良好(参见示例).App对象内保存指向它的指针),则不会发生错误.-O0标志),则不会发生错误.它在优化设置为时发生-O2.以下是我能想出的最简单,可编译的代码示例,它会导致问题.
#include <iostream>
#include <functional>
class App {
public:
std::function<void*()> test_;
void Run() {
// Enable this line, ERROR is printed
// Disable this line, app runs o.k.
std::cout << "This print statement causes the bug below!" << std::endl;
test_ = [this] () …Run Code Online (Sandbox Code Playgroud) 我有一个框架,它将异常定义为一个不可复制的类,我们从中派生了一个可复制的类(定义一个复制构造函数,调用一个非复制的基类构造函数)
这适用于g ++,但不适用于MSVC 2013.
以下代码将重现该问题:
#include <iostream>
using namespace std;
#if defined _MSC_VER
#define __PRETTY_FUNCTION__ __FUNCTION__
#endif
class u {
u(const u&) = delete;
const u& operator=(const u&) = delete;/* the library we use defines it as const u& */
public:
u() { cout << __PRETTY_FUNCTION__ << "def" << endl; }
protected:
explicit u(int i) { cout << __PRETTY_FUNCTION__ << "int: " << i << endl; }
};
class e : public u {
public:
e() { cout << __PRETTY_FUNCTION__ …Run Code Online (Sandbox Code Playgroud) std::size_t通常用于数组索引和循环计数.根据定义,std::size_t是sizeof运算符以及sizeof...运算符和alignof运算符的结果的无符号整数类型(自C++ 11起).它在以下标题中定义:
<cstddef><cstdio><cstdlib><cstring><ctime><cwchar>据我了解,这些运算符返回的类型是实现定义的.
我想要的是定义一个自定义size_t,以避免从.cpp我的文件中的上述任何标题中提取不必要的东西,因为在我的文件中我只需要std::size_t.
在C++ 11及更高版本中,我认为我可以使用以下别名:
using size_t = decltype(sizeof(1));
Run Code Online (Sandbox Code Playgroud)
但是,我想以size_t便携/跨平台的方式为C++ 11之前的编译器定义一种类型.
那么有一种可移植的方式来定义size_t前C++ 11吗?
我的代码中出现以下错误:
error: allocating an object of abstract class type 'Material'
我不知道如何处理这个案子.
我知道std::make_unique执行分配,所以它不能分配类型的对象Material,但我不知道如何纠正它.
#include <iostream>
#include <memory>
struct Material
{
Material() = default;
virtual int get_color() const = 0;
};
struct Basic : public Material
{
Basic() = default;
virtual int get_color() const override
{
return 1;
}
};
struct Mix : public Material
{
Mix(const Material& mat1, const Material& mat2)
: mat1_(std::make_unique<Material>(mat1))
, mat2_(std::make_unique<Material>(mat2))
{}
virtual int get_color() const override
{
return mat1_->get_color() + mat2_->get_color();
} …Run Code Online (Sandbox Code Playgroud)