您好我正在尝试编写一个程序,该程序将创建一个线程,系统将在其中调用char缓冲区。我是线程的新手,我很难让线程工作。 我得到的大部分内容都来自于gooogle搜索和观看视频。
这是我到目前为止所拥有的。
#define BUFFERSIZE 25
DWORD WINAPI ThreadFunc(LPVOID param);
int main()
{
while (1)
{
char buffer[BUFFERSIZE];
DWORD threadID;
HANDLE ThreadHandle;
fgets(buffer,BUFFERSIZE,stdin);
if (buffer == "dir")
{
ThreadHandle = CreateThread(NULL, 0,ThreadFunc, &buffer, 0, &threadID);
}
else if (buffer == "help")
{
}
else if (buffer == "vol")
{
}
else if (buffer == "path")
{
}
else if (buffer == "tasklist")
{
}
else if (buffer == "notepad")
{
}
else if (buffer == "echo")
{
}
else if (buffer == "color")
{
}
else
{
}
}
}
DWORD WINAPI ThreadFunc(LPVOID param)
{
char* value = (char*)param;
system(value);
return 0;
}
答案 0 :(得分:0)
似乎有两个错误:
<强>第一强>
ThreadHandle = CreateThread(NULL, 0,ThreadFunc, &buffer, 0, &threadID)
应该是
ThreadHandle = CreateThread(NULL, 0,ThreadFunc, buffer, 0, &threadID)
请注意,缓冲区丢失了&
,因为数组的名称已经是指向它的指针。
<强>第二强>
运行第二个线程后,主线程立即退出。 遗憾的是,只要主线程存在,进程就会终止,所以没有任何反应。尝试在主线程中添加一个睡眠。
答案 1 :(得分:0)
您的代码几乎没有问题:
CreateThread
(缓冲区)的参数不正确。您使用错误的类型和变量范围。
醇>
char *
这样的类型没有重载运算符,而==
会导致指针比较。
醇>
#define BUFFERSIZE 25
DWORD WINAPI ThreadFunc(LPVOID param);
int main()
{
while (1)
{
char* buffer = new char [BUFFERSIZE];
DWORD threadID;
HANDLE ThreadHandle;
fgets(buffer,BUFFERSIZE,stdin);
if (strcmp(buffer, "dir") == 0)
{
ThreadHandle = CreateThread(NULL, 0,ThreadFunc, buffer, 0, &threadID);
}
else if(...) // next
{
}
else
{
delete[] buffer;
}
}
}
DWORD WINAPI ThreadFunc(LPVOID param)
{
char* value = (char*)param;
system(value);
delete[] value;
return 0;
}