小编jxh*_*jxh的帖子

硬实时,软实时和坚实实时之间的差异?

我已经阅读了不同实时概念的定义,为硬实时系统和软实时系统提供的示例对我来说很有意义.但是,没有真正的解释或坚实的实时系统的例子.根据上面的链接:

公司:不经常的最后期限错失是可以容忍的,但可能会降低系统的服务质量.在截止日期之后,结果的有用性为零.

企业实时与硬实时或软实时之间是否有明显的区别,是否有一个很好的例子来说明这种区别?

在评论中,Charles要求我为新标签提交标签维基.我为标签提供的"公司实时系统"的例子是牛奶服务系统.如果系统在到期时间后输送牛奶,则认为牛奶"无用".人们可以忍受吃不含牛奶的谷物,但体验质量会降低.

这只是我在最初阅读定义时在脑海中形成的想法.我正在寻找一个更好的例子,也许是对实时公司的更好定义,这将改善我对它的看法.

real-time hard-real-time soft-real-time firm-real-time

96
推荐指数
7
解决办法
18万
查看次数

.*&运营商做什么?

我偶然发现了这个问题,其答案使用了一个奇怪的结构:

typedef std::queue<int> Q;
typedef Q::container_type C;

C & get (Q &q)
{
    struct hack : private Q {
        static C & get (Q &q) {
            return q.*&hack::c;
        }
    };
    return hack::get(q);
}
Run Code Online (Sandbox Code Playgroud)

我通常遵循它q可以访问cget函数引用的自己的成员.但是,我无法清楚地解释它.究竟发生了什么.*&,为什么允许?

c++ stl c++11

31
推荐指数
2
解决办法
1268
查看次数

无法找到过程入口点__gxx_personality_v0

编者注:类似于"程序错误点_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_无法在动态链接库中找到libstdc++-6.dll"的错误消息具有相同的原因,并且适用相同的解决方案.


如果我想在Windows中运行我的Irrlicht C++控制台应用程序,我会不断收到此错误:

the procedure entry point __gxx_personality_v0 could not be located in the dynamic link library libstdc++-6.dll

我正在使用CodeBlocks v12.11与MinGW和Irrlicht v1.8引擎.我正确设置了它.在我的电脑上还有一个安装了MinGW的Qt.是否可能存在冲突?

这是源代码:

#include <irrlicht.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

int main() {
    IrrlichtDevice *device = createDevice( video::EDT_OPENGL);

    if (!device)
        return 1;

    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    IGUIEnvironment* guienv = device->getGUIEnvironment();

    guienv->addStaticText(L"Hello World", core::recti(10, 10, 100, 30));
    device->setWindowCaption(L"Hello World! - …
Run Code Online (Sandbox Code Playgroud)

c++ qt mingw codeblocks irrlicht

30
推荐指数
2
解决办法
3万
查看次数

在int数组上使用memcmp严格符合吗?

以下程序是C中严格符合的程序吗?我对c90和c99感兴趣,但c11的答案也是可以接受的.

#include <stdio.h>
#include <string.h>

struct S { int array[2]; };

int main () {
    struct S a = { { 1, 2 } };
    struct S b;
    b = a;
    if (memcmp(b.array, a.array, sizeof(b.array)) == 0) {
        puts("ok");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对不同问题的答案的评论中,Eric Postpischil坚持认为程序输出将根据平台而改变,主要是由于未初始化填充位的可能性.我认为结构赋值会覆盖所有位,b使其与in相同a.但是,C99似乎没有提供这样的保证.从第6.5.16.1节第2节:

简单赋值(=)中,右操作数的值将转换为赋值表达式的类型,并替换存储在左操作数指定的对象中的值.

在复合类型的背景下,"转换"和"替换"是什么意思?

最后,考虑相同的程序,除了定义ab全局.请问程序是严格符合程序?

编辑:只是想在这里总结一些讨论材料,而不是添加我自己的答案,因为我没有自己的创作.

  • 该计划并不严格遵守.由于赋值是按值而不是表示,因此b.array可能包含也可能不包含以不同方式设置的位a.array.
  • a不需要转换,因为它是相同的类型b,但替换是按值,并由成员完成.
  • 即使在ab中的定义是全局的,后分配, …

c language-lawyer

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

为什么在float文字的末尾添加0会改变它的轮次(可能是GCC错误)?

我在x86 VM(32位)上发现了以下程序:

#include <stdio.h>
void foo (long double x) {
    int y = x;
    printf("(int)%Lf = %d\n", x, y);
}
int main () {
    foo(.9999999999999999999728949456878623891498136799780L);
    foo(.999999999999999999972894945687862389149813679978L);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

(int)1.000000 = 1
(int)1.000000 = 0
Run Code Online (Sandbox Code Playgroud)

Ideone也会产生这种行为.

编译器做了什么来允许这种情况发生?

我发现这个不变,因为我正在追踪为什么下面的程序没有0按照我的预期产生(使用19 9秒产生0我预期的):

int main () {
    long double x = .99999999999999999999L; /* 20 9's */
    int y = x;
    printf("%d\n", y);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我试图计算结果从预期切换到意外时的值时,我得出了这个问题的常数.

c c++ floating-point gcc

25
推荐指数
2
解决办法
1814
查看次数

Java Encapsulation Concept不清楚

这是基本问题,但我仍然不理解封装概念.我不明白如何从其他类更改类的属性.因为每当我们尝试设置类的公共实例值时,我们必须创建该类的对象然后设置值.每个对象引用不同的内存即使我们更改实例值,这也不会影响任何其他对象.

即使我尝试使用静态公共实例值进行更改,我也无法更改类属性值.

实例如下

// Employee class
public class Employee {
    public static int empid;
    public static String empname;

    public static void main(String[] args) {
        System.out.println("print employe details:"+empid+" "+empname);
    }

    // EmployeeTest  class
    public class EmployeeTest {

        public static void main(String[] args) {
            Employee e = new Employee();
            e.empid=20;
            e.empname="jerry";
            Employee.empid=10;
            Employee.empname="tom";
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

每次我Employee上课,我都会得到相同的价值

print employe details:0 null

即使我没有遵循封装概念,我也无法改变员工类的公共实例值.请帮助我理解我出错的概念.

java encapsulation

24
推荐指数
3
解决办法
4万
查看次数

写入封闭的本地TCP套接字不会失败

我的套接字似乎有问题.下面,您将看到一些分叉服务器和客户端的代码.服务器打开TCP套接字,客户端连接到它,然后关闭它.睡眠用于协调时间.在客户端关闭()之后,服务器尝试将write()写入其自己的TCP连接端.根据write(2)手册页,这应该给我一个SIGPIPE和一个EPIPE错误.但是,我没有看到这一点.从服务器的角度来看,写入本地已关闭的套接字成功,如果没有EPIPE,我无法看到服务器应该如何检测到客户端已关闭套接字.

在关闭其结束的客户端和尝试写入的服务器之间的间隙中,对netstat的调用将显示连接处于CLOSE_WAIT/FIN_WAIT2状态,因此服务器端应该绝对能够拒绝写入.

作为参考,我在Debian Squeeze上,uname -r是2.6.39-bpo.2-amd64.

这里发生了什么?


#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <sys/select.h>
#include <netinet/tcp.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>

#include <netdb.h>

#define SERVER_ADDRESS "127.0.0.7"
#define SERVER_PORT 4777


#define myfail_if( test, msg ) do { if((test)){ fprintf(stderr, msg "\n"); exit(1); } } while (0)
#define myfail_unless( test, msg ) myfail_if( !(test), msg )

int connect_client( char *addr, int actual_port )
{
    int client_fd;

    struct addrinfo hint;
    struct addrinfo …
Run Code Online (Sandbox Code Playgroud)

c sockets linux tcp glibc

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

如何快速计算任何底的整数对数?

如何快速计算任何底数的整数对数,而不仅仅是底数 10?这个问题对于基数 10 有一个非常有效的解决方案,但我想了解如何将其推广到其他基数。

c++ math logarithm base c++17

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

读写mmap的参数无效?

-EINVAL出于某种原因,我不明白为什么.这是我打开并尝试mmap该文件的位置:

if ((fd = open(argv[1], O_RDWR)) < 0)
{
    fprintf(stderr, "Failed to open %s: %s\n", argv[1], strerror(errno));
    return 1;
}

struct stat statbuf;
if (fstat(fd, &statbuf))
{
    fprintf(stderr, "stat filed: %s\n", strerror(errno));
    return 1;
}

char* fbase = mmap(NULL, statbuf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (fbase == MAP_FAILED)
{
    fprintf(stderr, "mmap failed: %s\n", strerror(errno));
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我应该补充,错误发生在mmap.

c linux virtualbox mmap

20
推荐指数
2
解决办法
2万
查看次数

非常基本的继承:错误:'{'标记之前的预期类名

我正在尝试学习c ++,我在试图找出继承时偶然发现了一个错误.

编译:daughter.cpp在/home/jonas/kodning/testing/daughter.cpp:1中包含的文件:/home/jonas/kodning/testing/daughter.h:6:错误:'{'令牌之前的预期类名进程终止,状态1(0分,0秒)1个错误,0个警告

我的文件:main.cpp:

#include "mother.h"
#include "daughter.h"
#include <iostream>
using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    mother mom;
    mom.saywhat();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

mother.cpp:

#include "mother.h"
#include "daughter.h"

#include <iostream>

using namespace std;


mother::mother()
{
    //ctor
}


void mother::saywhat() {

    cout << "WHAAAAAAT" << endl;


}
Run Code Online (Sandbox Code Playgroud)

mother.h:

#ifndef MOTHER_H
#define MOTHER_H


class mother
{
    public:
        mother();
        void saywhat();
    protected:
    private:
};

#endif // MOTHER_H
Run Code Online (Sandbox Code Playgroud)

daughter.h:

#ifndef DAUGHTER_H
#define DAUGHTER_H


class daughter: public mother
{
    public: …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

18
推荐指数
5
解决办法
6万
查看次数