问:为何这样会造成死机。请大伙帮帮。在BCB中。
DWORD Tid;
HANDLE THandle;
THandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThread, NULL, CREATE_SUSPENDED, &Tid);
DWORD Tid2;
HANDLE THandle2;
THandle2= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThread2, NULL, CREATE_SUSPENDED, &Tid2);
void __fastcall TForm1::MyThread() //static 的函数
{
for(int i=1;i<=100;i+=2)
Form1->RichEdit1->Lines->Add(i);
}
void __fastcall TForm1::MyThread2() //static 的函数
{
for(int i=2;i<=100;i+=2)
Form1->RichEdit1->Lines->Add(i);
}
答:1、线程函数不能是类成员函数(特别是vcl类),只能是独立的函数;
2、线程实体须注意线程安全。
*****
问:请教各位,在WINDOWS98下有无C语言运行编译程序,TURBO C好象不怎么好用?
答:TC可以在9x的dos box下很好的运行。
tc bc vc watcom c djgpp mingw 太多了数不完。
*****
问:错误1:
rpm -bi opennms-0.7.2-2.src.rpm
File contains non-printable characters(?: /home/opennms/opennms-0.7.2-2.src.rpm
错误2:
rpm -i jsse-1.0.2-3onms.src.rpm
only packages with major numbers <= 3 are supported by this version of RPM
error: jsse-1.0.2-3onms.src.rpm cannot be installed
多谢指教
答:你的rpm版本太旧了。
*****
问:我现在要做一个Unix进程管理系统,其中一个功能是,当被监控的进程崩溃以后,进程管理器可以自动重新启动这个程序,(进程管理器是以守护进程的形式出现的)
要重新启动一个进程,必须要做的其中一个步骤,就是要模拟出进程启动时候的环境
譬如说,进程A是用户user_A在 /usr/shacker里面执行 "BootServer 4001"这样的命令得到的,对于进程A来说,工作目录就是/usr/shacker. 当进程A崩溃了,重新启动这个进程,除了要重新执行这个命令"BootServer 4001"以外,按照我的想法,还需要使这个进程工作于/usr/shacker里面
所以我的做法是
int main(){
pid_t pid;
if ((pid=fork())==0)
{
//in child
chdir("崩溃进程的工作目录");//譬如说 /usr/shacker
system("执行崩溃进程的命令行"); //譬如说ls >filelist
}
else
{
}
但发现是不行的,system("执行崩溃进程的命令行")以后,需要重启动的崩溃进程工作目录还是进程监控系统的工作目录,显然是不合理的
怎么解决这个问题呢?thanks
答:system("脚本程序");在脚本程序里面想去哪个目录不行啊。
答2:#include <unistd.h>
#include <errno.h>
#include <stdio.h>
int main()
{
switch(fork()) {
case 0:
if(chdir("/tmp")) {
perror("chdir");
exit(1);
}
system("ls >out.txt");
exit(0);
case -1:
exit(1);
default:
exit(0);
}
}
上面的程序在FreeBSD4.2下通过。另外参考:
fork(), getcwd(), getwd(), chdir(), chroot()等函数的man手册。
*****
问:为什么一个系统上次修改后下次启动可以保留上次修改的属性。是不是以文件的方式保留的系统状态?
答:一般在注册表或文件(ini文件)里保存。