我已经阅读了不同实时概念的定义,为硬实时系统和软实时系统提供的示例对我来说很有意义.但是,没有真正的解释或坚实的实时系统的例子.根据上面的链接:
公司:不经常的最后期限错失是可以容忍的,但可能会降低系统的服务质量.在截止日期之后,结果的有用性为零.
企业实时与硬实时或软实时之间是否有明显的区别,是否有一个很好的例子来说明这种区别?
在评论中,Charles要求我为新标签提交标签维基.我为公司实时标签提供的"公司实时系统"的例子是牛奶服务系统.如果系统在到期时间后输送牛奶,则认为牛奶"无用".人们可以忍受吃不含牛奶的谷物,但体验质量会降低.
这只是我在最初阅读定义时在脑海中形成的想法.我正在寻找一个更好的例子,也许是对实时公司的更好定义,这将改善我对它的看法.
我偶然发现了这个问题,其答案使用了一个奇怪的结构:
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
可以访问c
由get
函数引用的自己的成员.但是,我无法清楚地解释它.究竟发生了什么.*&
,为什么允许?
编者注:类似于"程序错误点_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中严格符合的程序吗?我对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节:
在简单赋值(
=
)中,右操作数的值将转换为赋值表达式的类型,并替换存储在左操作数指定的对象中的值.
在复合类型的背景下,"转换"和"替换"是什么意思?
最后,考虑相同的程序,除了定义a
和b
全局.请问该程序是严格符合程序?
编辑:只是想在这里总结一些讨论材料,而不是添加我自己的答案,因为我没有自己的创作.
b.array
可能包含也可能不包含以不同方式设置的位a.array
.a
不需要转换,因为它是相同的类型b
,但替换是按值,并由成员完成.a
和b
中的定义是全局的,后分配, …我在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)
编译器做了什么来允许这种情况发生?
我发现这个不变,因为我正在追踪为什么下面的程序没有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)
当我试图计算结果从预期切换到意外时的值时,我得出了这个问题的常数.
这是基本问题,但我仍然不理解封装概念.我不明白如何从其他类更改类的属性.因为每当我们尝试设置类的公共实例值时,我们必须创建该类的对象然后设置值.每个对象引用不同的内存即使我们更改实例值,这也不会影响任何其他对象.
即使我尝试使用静态公共实例值进行更改,我也无法更改类属性值.
实例如下
// 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
即使我没有遵循封装概念,我也无法改变员工类的公共实例值.请帮助我理解我出错的概念.
我的套接字似乎有问题.下面,您将看到一些分叉服务器和客户端的代码.服务器打开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) 如何快速计算任何底数的整数对数,而不仅仅是底数 10?这个问题对于基数 10 有一个非常有效的解决方案,但我想了解如何将其推广到其他基数。
我-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 ++,我在试图找出继承时偶然发现了一个错误.
编译: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)