9
votes

Filetage en C

Je veux créer un thread en C afin que le fil appelle automatiquement après deux secondes. J'utilise Visual Studio et Windows Platform pour le développement.

Comment puis-je commencer?

c

2 commentaires

Quelle plate-forme? Et que voulez-vous dire, "Appelez automatiquement"? Si le fil appelle automatiquement une fonction après un délai de deux secondes? Avez-vous besoin que cela soit un fil séparé ou une minuterie dans le même thread sera-t-elle suffisante? Essayez d'être un peu plus précis dans votre question.


J'utilise la plate-forme Visual Studio 2008 et Window pour le développement. Et appelez automatiquement signifie que je veux appeler récursivement le thread après toutes les 2 secondes, comme la fonction NSTIMER dans l'objectif c.


7 Réponses :


2
votes

Il n'y a rien dans la norme C qui pourrait vous aider. Vous devez utiliser certaines fonctionnalités de la bibliothèque ou de la plate-forme. N'oubliez pas que de nombreuses plates-formes n'ont tout simplement pas de threads - seuls des processus de poids complets.

sur Windows utilise Createthread () . Vous aurez besoin de Microsoft SDK pour compiler votre code à l'aide de cela et d'autres fonctions Win32.


3 commentaires

Veuillez me dire des bibliothèques qui peuvent rendre cela possible.


Je vous suggère de spécifier d'abord les exigences de la plate-forme cible - je pourrais indiquer une bibliothèque qui ne convient pas à la plate-forme de votre intérêt.


Veuillez nous dire votre plate-forme, Arman ... sur UNIX, vous utiliseriez normalement la bibliothèque Posix Pthread; Sous Windows, vous utilisez l'API Windows Native Windows.



2
votes

C n'a pas construit dans des installations de filetage; Vous devrez utiliser vos services OS pour créer un fil.

pour Windows utilise Fonction Createthread .


0 commentaires

19
votes

Vous aurez besoin d'utiliser des bibliothèques spécifiques au système d'exploitation pour fileter. Sur POSIX, vous voudrez regarder dans pthreads (et spécifiquement pthread_create ). Sur Windows, vous voudrez Createthread ou _ BegtinThreadex .


1 commentaires

La nouvelle norme C, C11 inclut Support multi-threading



4
votes

Multithreading in C est la plate-forme dépendante. Vous devez utiliser des bibliothèques externes correspondant à différentes plates-formes.

LIRE À propos de:

multithreading in c, style POSIX et Multhreading avec C et Win32


0 commentaires

2
votes

Vous pouvez vérifier ce lien de différentes façons de le faire: Windows threading: _Beginthread vs _breginthreadex vs créethread C ++

Pour le code multiplate-forme, vous pouvez également consulter le Boost Bibliothèque ou Blocs de construction Intel Filetage .


0 commentaires

1
votes

Veuillez vous référer à MSDN pour VC8. Reportez-vous à la Createthread () Aide là-bas. Cela devrait vous donner des informations suffisantes.

Pour vérifier en ligne, veuillez consulter le lien ci-dessous:

http://msdn.microsoft.com/ EN-US / Bibliothèque / MS682453 (vs.85) .aspx


0 commentaires

0
votes

Voici un exemple de programme pour une filetage unique et multithreading dans Win32api écrit en C travaillera sur Visual Studio.

singlethread.c strong> p>

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#define NUM_THREADS 2     //  Define Number of threads here or take as user Input, 
                          // In yourquestion it is 2

DWORD WINAPI funHello(void *x)
{
    int c = (int*)x;
    printf("\n Thread No: %d\n",c);
    Sleep(2000);
    return 0;
}
int main()
{
    HANDLE *arrayThread;
    arrayThread = (int*)malloc(NUM_THREADS * sizeof(int));
    DWORD ThreadId;

    for (int i = 0; i < NUM_THREADS; i++)
    {
        arrayThread[i] = CreateThread(NULL, 0, funHello, (void *)i, 0, &ThreadId);
        if (arrayThread[i] == NULL)
        {
            printf("Create Thread %d get failed. Error no: %d", i, GetLastError);
        }
    }

    WaitForMultipleObjects(NUM_THREADS, arrayThread,TRUE,INFINITE);
    DWORD lpExitCode;
    BOOL result;

    for (int i = 0; i < NUM_THREADS; i++)
    {
        CloseHandle(arrayThread[i]);
    }
    printf("\n Hello Main..");
    return 0;
}


0 commentaires