我有一个小代码
void *PrintHello(void *threadid)
{
cout<<"Hello"<<endl;
pthread_exit(NULL);
}
int main ()
{
pthread_t threads_id;
pthread_create(&threads_id, NULL, PrintHello, NULL);
int i=0;
for(;i<100;i++){cout<<"Hi"<<endl;}
pthread_join(threads_id,NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在创作后的某个时候加入了这个帖子.如果主要尝试加入已经退出的线程会发生什么?
#include<iostream>
#include<thread>
using namespace std;
void func()
{
for (int i = 0; i < 10000; i++)cout << "Print" << endl;
}
int main()
{
thread t(func);
t.detach();
cout << "Exit" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当主要退出时,"Print"文本将在哪里消失,因为它没有输出流?是否存在用于插入无用的数据的虚拟流?
为什么有人想write_some在可能无法将所有数据传输到同行时使用?
来自boost write_some文档
write_some操作可能不会将所有数据传输到对等方.如果需要确保在阻塞操作完成之前写入所有数据,请考虑使用write函数.
write_some具有write方法时,方法在boost中的相关性是什么?我查看了boost write_some文档,我无法猜到.
我正在尝试学习Boost.asio库.现在我可以创建一个可以进行通信的客户端和服务器.
为什么我们需要定义一个io_service对象?因为如果这是套接字可用于注册/与底层操作系统通信的唯一对象类型,为什么我们必须无论如何都要定义它.套接字不能自动猜出来吗?我在这里错过了什么?
我的代码
class Parent { int a; };
class Child { int b; };
struct GrandChild : public Parent, public Child { int a, b, c; };
int main() {
GrandChild GC;
std::cout << "GrandChild's address is at : " <<&GC<<endl;
std::cout << "Child's address is at : " <<static_cast<Child*>(&GC)<<endl;
std::cout << "Parent's address is at : " <<static_cast<Parent*>(&GC)<<endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
GrandChild's address is at : 0077F6F8
Child's address is at : 0077F6FC
Parent's address is at : 0077F6F8
Run Code Online (Sandbox Code Playgroud)
为什么在static_cast之后内存位置有如上所述的不一致?
我今天在处理复杂库时遇到的一个极简循环依赖问题如下
class Something;
class Test
{
public:
int i;
void process()
{
Something S;
S.doSomething();
}
};
class Something
{
public:
void doSomething()
{
Test t;
t.i = 10;
}
};
int main()
{
Test t;
t.process();
}
Run Code Online (Sandbox Code Playgroud)
test.cxx:10:16:错误:聚合“ S事物”类型不完整,无法定义。
使这项工作最少的代码更改是什么?重新排列Testor Something类只会交换错误。我可以想到的一个方法是使用全局/静态函数,doSomething()其中的操作与Test t对象有关。有什么更好的方法?
class Base{};\n class Derived: public Base{};\n\n int main()\n {\n Base B;\n Derived D;\n\n Base B1 = D;//OK\n Derived D1 = B;//error: conversion from \xe2\x80\x98Base\xe2\x80\x99 to non-scalar \n //type \xe2\x80\x98Derived\xe2\x80\x99 requested\n return 1;\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我知道派生类与基类具有 is-a 关系。
\n\n什么阻止派生 D1 具有来自 B 的值以及具有某些垃圾值的剩余成员变量(如果有)?
\n\n或者
\n\n错误信息是什么意思
\n\n\n\n\n从 \xe2\x80\x98Base\xe2\x80\x99 到非标量类型 \xe2\x80\x98Derived\xe2\x80\x99 的转换请求 Derived D1 = B;
\n
说?什么是标量类型?
\n下面的代码给了我编译错误:
#include<pthread.h>
#include<stdio.h>
pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
int i=0;
void *func(void *a)
{
pthread_mutex_lock(&mutex);
i++;
printf("The value of thread is: %d\n",i);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main()
{
pthread_t id1,id2;
if(pthread_create(&id1,NULL,func,NULL)<0)
perror("pthread_create error\n");
pthread_join(id1,NULL);
pthread_join(id2,NULL);
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error: invalid initializer
pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
Run Code Online (Sandbox Code Playgroud)
我的 pthread.h 的相关内容是:
enum
{
PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_ADAPTIVE_NP
#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
,
PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
#endif
#ifdef __USE_GNU
/* For compatibility. */
, PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 c 代码与 asm 接口。但它无法正常工作,我无法找到问题。
程序.c
#include<stdio.h>
int *asm_multi(int *ptr);
int main()
{
int i=10;
int *p=&i;
asm_multi(p);
printf("%d\n",*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码.asm
.section .text
.global asm_multi
.type asm_multi,@function
asm_multi:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
movl %eax,%edx
leal (%edx,%edx,1),%edx
movl %edx,%eax
movl %ebp,%esp
popl %ebp
ret
Run Code Online (Sandbox Code Playgroud)
我正在创建最终的可执行文件
as code.asm -o code.o
gcc program.c code.o -o output
./output
Run Code Online (Sandbox Code Playgroud)
它打印的输出是:10 而我期待的是:20
代码中有什么问题?不要考虑程序的效率。我刚刚开始 asm 编程。
在阅读了保存在此链接中的更复杂示例后,我创建了上述代码。这完美地工作。
为什么我的红宝石给出的数字大小不正确?数字是什么并不重要.对于大小,输出始终为4.那是什么意思?我一直以为它应该给出位数.
number = 14
print number
print "\n"
print number.size
Run Code Online (Sandbox Code Playgroud)
输出:
14
4
Run Code Online (Sandbox Code Playgroud)
红宝石版
ruby 2.1.8p440 (2015-12-16 revision 53160) [i386-mingw32]
Run Code Online (Sandbox Code Playgroud) c++ ×6
c ×3
boost ×2
boost-asio ×2
inheritance ×2
pthreads ×2
assembly ×1
att ×1
c++11 ×1
mutex ×1
networking ×1
pthread-join ×1
ruby ×1
static-cast ×1
x86 ×1