Articles of c + +

使用pthread_cancel取消线程:好的做法或不好的

我在Linux上有一个C ++程序(CentOS 5.3)产生多个线程,在无限循环中执行一个任务并在一定的时间内hibernate。 现在,我必须取消正在运行的线程,以防万一发生新的configuration通知,并且新启动一组新的线程,为此我使用了pthread_cancel。 我观察到的是,即使接收到取消指示,线程也没有停止,甚至一些睡眠线程在睡眠完成后出现。 由于行为并不理想,所以在上述情况下使用pthread_cancel会引起对做法的好坏的质疑。 请在上述场景中对pthread_cancel用法进行评论。

在Linux上使用kbhit()和getch()

在Windows上,我有以下代码来查找input而不中断循环: #include <conio.h> #include <Windows.h> #include <iostream> int main() { while (true) { if (_kbhit()) { if (_getch() == 'g') { std::cout << "You pressed G" << std::endl; } } Sleep(500); std::cout << "Running" << std::endl; } } 但是,看到没有conio.h ,在Linux上实现这个同样的事情最简单的方法是什么?

subprocess接收父节点的SIGINT

我有一个使用Qt框架的简单程序。 它使用QProcess来执行RAR并压缩一些文件。 在我的程序中,我正在捕获SIGINT,并在发生代码时做了一些事情: signal(SIGINT, &unix_handler); 当SIGINT发生时,我检查RAR进程是否完成,如果不是,我会等待它…问题是(我认为)RAR进程也得到了SIGINT,这是我的程序的意思,它退出之前压缩了所有文件。 有没有办法运行RAR进程,以便它在我的程序收到它时不会收到SIGINT? 谢谢

超时function

我想做一个代码,用户名将被要求input,但在15秒的时间限制。 如果用户超过限制,input名称(或任何string)失败,代码将被终止,“超时”button将显示,否则名称应保存和“谢谢”按摩将显示。 我曾尝试过,但是这是错误的,不工作。 请给我一个这个解决scheme..谢谢。 #include <stdio.h> #include <time.h> int timeout ( int seconds ) { clock_t endwait; endwait = clock () + seconds * CLOCKS_PER_SEC ; while (clock() < endwait) {} return 1; } int main () { char name[20]; printf("Enter Username: (in 15 seconds)\n"); printf("Time start now!!!\n"); scanf("%s",name); if( timeout(5) == 1 ){ printf("Time […]

Windows 7计时function – 如何正确使用GetSystemTimeAdjustment?

我在Windows 7上使用GetSystemTimeAdjustment函数进行了一些testing,并得到了一些我无法解释的有趣结果。 按照我的理解,如果系统时间周期性地同步,那么这个方法应该返回,如果是,在哪个时间间隔和哪个增量更新( 参见MSDN上的GetSystemTimeAdjustment函数 )。 从这我跟着,如果我查询系统时间例如使用GetSystemTimeAsFileTime重复我应该得到没有改变(系统时钟还没有更新),或者一个改变是由GetSystemTimeAdjustment检索增量的倍数。 问题一:这个假设是否正确? 现在考虑下面的testing代码: #include <windows.h> #include <iostream> #include <iomanip> int main() { FILETIME fileStart; GetSystemTimeAsFileTime(&fileStart); ULARGE_INTEGER start; start.HighPart = fileStart.dwHighDateTime; start.LowPart = fileStart.dwLowDateTime; for (int i=20; i>0; –i) { FILETIME timeStamp1; ULARGE_INTEGER ts1; GetSystemTimeAsFileTime(&timeStamp1); ts1.HighPart = timeStamp1.dwHighDateTime; ts1.LowPart = timeStamp1.dwLowDateTime; std::cout << "Timestamp: " << std::setprecision(20) << (double)(ts1.QuadPart – start.QuadPart) […]

系统(“cd <path>”)在C程序中

我试图在C程序中使用system()函数。 例如,我尝试使用system()函数在桌面上创build一个目录。 我的代码: #include <stdio.h> #include <stdlib.h> int main(void) { system("cd c:\\Users\\USER\\Desktop"); system("mkdir test"); return 0; } 当我运行这个代码时,会创build一个目录,但不在我的桌面上。 它是在我的项目目录中创build的。 为什么发生这种情况? 我可以在system()函数中使用cd命令吗? 如果没有,是否有一个替代cd命令,将与system()? 我正在使用Windows操作系统。 我试图从C程序中使用system(),因为我使用cmd程序。 我知道我可以使用WinAPI创build目录,没有任何问题。 我不想使用WinAPI,我的问题是如何使它使用system()。

如何设置文件权限(跨平台)

我正在使用C ++ ofstream来写出一个文件。 我想将权限设置为只能由用户访问:700.在unix中; 我想我可以发出一个system("chmod 700 file.txt"); 但是我需要这个代码来在Windows上工作。 我可以使用一些Windows API; 但是什么是最好的c ++跨平台的方式来做到这一点?

如何通过Windowsterminal发送EOF

我试图从K&R书中理解例1.9,但是我不知道如何发送EOF。 一些消息来源提到Ctr + Z,但是这只是终止程序。 我不知何故设法发送EOF与Enter和Ctrl + Z的组合,也许Ctrl + V,但我不能再现它。 #include <stdio.h> #define MAXLINE 1000 main() { int len; int max; char line[MAXLINE]; char save[MAXLINE]; max = 0; while((len = getline_my(line, MAXLINE)) > 0) if(len > max) { max = len; copy(line, save); } if(max > 0) printf("%S", save); } getline_my(s, lim) char s[]; int lim; […]

如何在C ++中获取进程名称

如何在Windows中使用C ++获取进程名称?

可以禁用“应用程序错误”对话框吗?

我使用Hudson作为持续集成服务器来testingC / C ++代码。 不幸的是,我有一个导致内存损坏的错误,所以在一些Windows机器上,我有时会得到一个“应用程序错误”对话框,解释一个指令引用了无法读取的内存。 这个对话框popup并基本挂起testing运行,因为它需要手动干预。 有没有办法来防止这个对话框出现,以便testing运行只是失败,并在哈德逊报告? 是否有可能自动生成一个小型转储,而不是显示对话框?