直到最近,我的印象是,如果你在产生线程后"分离"一个线程,那么即使在"主"线程终止之后线程仍然存在.
但是一个小实验(如下所列)与我的观点相反.我希望分离的线程继续打印"从分离的线程说话",即使在主要终止之后,但这似乎并没有发生.该应用程序显然终止了......
"主要"问题返回0后,"分离"线程是否死亡?
#include <pthread.h>
#include <stdio.h>
void *func(void *data)
{
while (1)
{
printf("Speaking from the detached thread...\n");
sleep(5);
}
pthread_exit(NULL);
}
int main()
{
pthread_t handle;
if (!pthread_create(&handle, NULL, func, NULL))
{
printf("Thread create successfully !!!\n");
if ( ! pthread_detach(handle) )
printf("Thread detached successfully !!!\n");
}
sleep(5);
printf("Main thread dying...\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我在cygwin windows上编写C语言.在完成了一些C编程并熟悉语言之后,我想深入了解编译器为我编写的代码做了些什么.
所以我写下了一个包含switch case语句的代码块,并使用以下方法将它们转换为汇编:
gcc -S foo.c
Run Code Online (Sandbox Code Playgroud)
这是C源:
switch(i)
{
case 1:
{
printf("Case 1\n");
break;
}
case 2:
{ printf("Case 2\n");
break;
}
case 3:
{
printf("Case 3\n");
break;
}
case 4:
{
printf("Case 4\n");
break;
}
case 5:
{
printf("Case 5\n");
break;
}
case 6:
{
printf("Case 6\n");
break;
}
case 7:
{
printf("Case 7\n");
break;
}
case 8:
{
printf("Case 8\n");
break;
}
case 9:
{
printf("Case 9\n");
break;
}
case 10:
{
printf("Case 10\n");
break;
} …Run Code Online (Sandbox Code Playgroud) 我是GUI设计和开发领域的新手.我确实有一些先前的经验,但这是使用Visual Basic.
我想基于命令行应用程序在linux上开发一个相当全面的(虽然不是最先进的)GUI应用程序.我有.做了一些谷歌搜索,我发现主要有三种好的(或者也许是我的感觉)方法来实现这个目标:
为了解决上述问题之一(或拒绝所有这些问题),我必须知道上面列表中每个项目的以下几个方面.这些方面按其优先顺序递减顺序为:
关于上述主题的任何想法都值得用黄金来衡量(我不想在一个月后意识到我为我的工作选择了错误的工具).有没有其他工具更适合我的目的,我不知道?
直落式答案最有帮助.
编辑:好的,所以我终于和Qt一起走了.仅仅因为它比GTK +更容易学习并且看起来更便携(对于我来说).
我正在将我的应用程序从Linux移植到Windows.我对跨平台移植应用程序的精湛技术相当陌生.据我所知,Windows本身不支持POSIX线程实现.这是真的?我听说过一些针对windows(包装器或其他东西)的pthreads实现,最好是使用它们还是使用CreateMutex和windows提供的其他API?有人请.用两个世界的PRO和CON启发我.一些关于移植的杂项提示将与答案很好地配合.
提前致谢.
我正在为特定类型的网络多媒体设备实现一种IP查找器.我想找出局域网中所有类型的活动设备,包括它们的IP地址和其他细节.
该设备有自己的设备发现方式.
它的工作原理如下:客户端通过UDP通过LAN发送广播请求.
目标端口号是固定的.
作为回应,LAN中理解此请求格式的所有服务器都将响应此请求,提供有关自身的信息.
我正在使用sendto()广播UDP请求消息.
现在我的问题是我不知道有多少设备(ieservers)会响应请求.
我需要多少次调用recvfrom()?
我什么时候才能知道我已经处理了所有设备的响应?
或者一般来说,recvfrom()是从多个服务器接收响应的正确选择吗?
有没有更好的(或者如果我错在这里是正确的)完成相同的方式?
我正在用C/C++编程,计划为Windows和Linux编写代码.
提前谢谢了.
编辑:所以在这里的所有网络编程向导的帮助下,我找到了解决我的问题的方法:)
select()对我来说就是这样的事情...非常
感谢所有花时间帮忙的人我
我最近遇到了一个相当不寻常的编码约定,其中对返回"void"的函数的调用以(void)为前缀.
例如
(void) MyFunction();
Run Code Online (Sandbox Code Playgroud)
它与函数调用有什么不同:
MyFunction();
Run Code Online (Sandbox Code Playgroud)
它有没有任何优势,或者它是另一个不必要但有某种编码约定?
我在Linux平台上用C++编程.
我的程序终止于此(未处理的)异常:
"在抛出'long'实例后终止调用"已中止
抛出异常的代码在try-catch块中,那为什么会发生这种情况?从函数返回时抛出异常.
我习惯于C编程,并且在C++方面经验很少(这是主要问题).我不知道如何调试这个问题.我不指望解决方案,而是指向调试此问题的方向/指针.
提前致谢.
我有一个这样的测试程序:
int main()
{
unsigned n = 32;
printf("ans << 32 = 0x%X\n", (~0x0U) << 32);
printf("ans >> 32 = 0x%X\n", (~0x0U) >> 32);
printf("ans << n(32) = 0x%X\n", (~0x0U) << n);
printf("ans >> n(32) = 0x%X\n", (~0x0U) >> n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它产生以下输出:
ans << 32 = 0x0 ... (1)
ans >> 32 = 0x0 ... (2)
ans << n(32) = 0xFFFFFFFF ... (3)
ans >> n(32) = 0xFFFFFFFF ... (4)
Run Code Online (Sandbox Code Playgroud)
我期望(1)和(3)是相同的,以及(2)和(4)是相同的.
使用gcc版本:gcc.real(Ubuntu 4.4.1-4ubuntu9)4.4.1
怎么了?
想要查看某些C代码的编译器输出(在汇编中),我在C中编写了一个简单的程序,并使用gcc生成了它的汇编文件.
代码是这样的:
#include <stdio.h>
int main()
{
int i = 0;
if ( i == 0 )
{
printf("testing\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的生成程序集在这里(只有主函数):
_main:
pushl %ebpz
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %eax
call __alloca
call ___main
movl $0, -4(%ebp)
cmpl $0, -4(%ebp)
jne L2
movl $LC0, (%esp)
call _printf
L2:
movl $0, %eax
leave
ret …Run Code Online (Sandbox Code Playgroud) 我正在生成mips反汇编以模拟它.我需要有大数据来处理它,但我不想拥有大的汇编文件,所以我想要处理一个大的未初始化的数组(然后可能在我的模拟器中初始化它...).所以我需要这个数组是全局的.并且全局变量似乎放在.bss部分,以便在实际访问页面时进行初始化.问题是在我的二进制文件中,数组在.bss部分,但显式填充为零...如果我正确理解我在互联网上找到的内容,这不是预期的行为......有没有办法说编译器(或链接器,或者加载器......我不明白哪一个为此做了什么)在这个数组中没有真正归零?或者,我们可以在编译时有一个选项,还是一个C指令,说我们不希望这个数组用0初始化?(我尝试使用属性更改数组部分,但仍使用0初始化).
顺便说一句,我用objdump生成我的反汇编文件,它通常跳过零块,但我真的需要反汇编其他的零块,所以我使用"-z"选项.
我真正不明白的是,无论我看到的是什么,都说.bss部分并没有真正把二进制文件中的零写入...
我需要开发一个适用于Windows和Linux的GUI,用于以C++编写并仅在Linux上运行的后端.
我知道如果我选择Java或Python,我需要使用包装器(如Swig),但是再次知道他们会产生比C++更好的GUI.
你会建议什么是更好的选择(对于新手)?