-2

我正在理解并在我的应用程序中实现线程的概念。从现在开始,事情进展顺利。但是我还有几个问题没有得到解答,它们现在让我变慢了。如果有人回复他们中的任何一个,我将不胜感激

  1. 在 Createthread() 中,我们可以只取 1 个参数吗?正如我在 MSDN 网站和我看到的所有其他示例中看到的那样,我只看到了 1 个参数 LPVOID。

  2. 另一件事是,返回值 DWORD WINAPI 作为返回值是什么意思?我们可以只有 DWORD 、 int 或任何其他返回类型吗?我想它与 HANDLE 有关(可能是)

  3. 我想使用线程的数组,因此我将数组学习为函数,并且(据我所知)线程本身只是一个由 CreateThread() 例程调用的函数,因此我尝试在那里实现该概念但不能因为返回类型的 DWORD WINAPI 不允许我这样做?

  4. 我有一个用于保存文件的线程,现在我想要它的数组,以便我可以同时保存多个文件(不是完全相同的开始时间,而是一种并行文件保存)。我怎样才能做到这一点?

谢谢山

4

2 回答 2

2
  1. 实际上,您只能采用一个类型为void *(LPVOID) 的参数。然而,由于它可以指向任何东西,它可以指向一个struct 或对象(通常出于生命周期的原因分配在堆上)。
  2. WINAPI 不是返回值的一部分,它是函数的调用约定。该函数必须返回一个 DWORD 或任何适合它的内容。它不能返回指针,因为指针不能适合 Win64 中的 DWORD。
  3. 我不明白,请详细说明您要做什么。
  4. 通常为此,您需要一个单线程函数,多次传递给 CreateThread(),每次使用不同的参数。不要忘记保留线程句柄(您可能会将其保存在数组中),直到您不再需要它们并使用 CloseHandle() 关闭它们。
于 2013-12-17T09:51:02.037 回答
0

对于第三点,我想我理解并且会尝试不同的方式。我正在使用

DWORD WINAPI save_uwpi_file0( LPVOID )
{
while(1)
{
    if(release == 1 && flag_oper1 == 1)
    {
    int w_cnt = 0;  FILE *opfile;
    char fname[30] = "txt_file0.txt";
    //opening file for write
    opfile = fopen(fname , "w");

    printf("assigning memory for file 1 \n");
    ssint *Lmem = (ssint *)malloc( sizeof(ssint)*size_of_memory);

    memcpy(Lmem, pInDMA, sizeof(ssint)*size_of_memory);
    release = 0;
    printf("relseaing for second file saving\n");
    for( int nbr = 0; nbr < size_of_memory; nbr++){
        fprintf(opfile , "%hi\n", Lmem[nbr] );
        }
    printf("aligned free 1\n");
    free(Lmem);

    fclose(opfile);

    printf("File saved 1\n\n");
    return 1;
    }   //if statement ends
}
}

我正在使用以下来制作指向(线程)函数的指针

DWORD WINAPI (* save_uwpi_file0)(LPVOID);

我想我应该尝试类似的东西

DWORD (* save_uwpi_file0)(LPVOID);

我会这样做并在这里发布结果

于 2013-12-18T03:04:47.907 回答