查询几个线程术语

时间:2013-12-17 08:00:30

标签: arrays multithreading winapi dword

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

  1. 在Createthread()中,我们只能接受1个参数吗?正如我在MSDN网站上看到的以及我看到的所有其他示例我只看到了一个参数LPVOID。

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

  3. 有关
  4. 我想使用线程的数组,因此我学习了数组到函数,并且(正如我所理解的)线程本身只是一个由CreateThread()例程调用的函数,因此我尝试实现那里的概念却因为返回类型而无法让DWORD WINAPI不允许我这样做?

  5. 我有一个用于保存文件的线程,现在我想要它的数组,这样我就可以同时保存多个文件(不是exaclty相同的开始时间,而是保存并行文件)。我怎么能这样做?

  6. 由于 单

2 个答案:

答案 0 :(得分:2)

  1. 实际上,您只能使用void *类型的一个参数(LPVOID)。 但是,因为它可以指向任何东西,它可以指向struct 或对象(通常由于生命周期原因在堆上分配)。
  2. WINAPI不是返回值的一部分,它是函数的调用 惯例。该函数必须返回一个DWORD或任何适合的东西 在里面。它一定不能返回指针,因为指针不能适合a Win64中的DWORD。
  3. 我不明白,请详细说明你的意思 试图做。
  4. 通常为此你需要一个单一的线程函数, 使用不同的参数多次传递给CreateThread() 每一次。不要忘记保留螺纹手柄(你会这样做) 可能会保存在一个数组中),直到你不再需要它们并关闭它们 用CloseHandle()。

答案 1 :(得分: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);

我会这样做并在此处发布结果