⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testthreadswin32.c

📁 libxml,在UNIX/LINUX下非常重要的一个库,为XML相关应用提供方便.目前上载的是最新版本,若要取得最新版本,请参考里面的readme.
💻 C
字号:
#include <stdlib.h>#include <stdio.h>#include "libxml.h"#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED)#include <libxml/globals.h>#include <libxml/threads.h>#include <libxml/parser.h>#include <libxml/catalog.h>#include <windows.h>#include <string.h>#include <assert.h>#define	MAX_ARGC	20#define TEST_REPEAT_COUNT 500static HANDLE tid[MAX_ARGC];static const char *catalog = "test/threads/complex.xml";static char *testfiles[] = {    "test/threads/abc.xml",    "test/threads/acb.xml",    "test/threads/bac.xml",    "test/threads/bca.xml",    "test/threads/cab.xml",    "test/threads/cba.xml",    "test/threads/invalid.xml",};const char *Okay = "OK";const char *Failed = "Failed";#ifndef xmlDoValidityCheckingDefaultValue#error xmlDoValidityCheckingDefaultValue is not a macro#endif#ifndef xmlGenericErrorContext#error xmlGenericErrorContext is not a macro#endifstatic DWORD WINAPIthread_specific_data(void *private_data){    xmlDocPtr myDoc;    const char *filename = (const char *) private_data;    int okay = 1;    if (!strcmp(filename, "test/threads/invalid.xml")) {        xmlDoValidityCheckingDefaultValue = 0;        xmlGenericErrorContext = stdout;    } else {        xmlDoValidityCheckingDefaultValue = 1;        xmlGenericErrorContext = stderr;    }    myDoc = xmlParseFile(filename);    if (myDoc) {        xmlFreeDoc(myDoc);    } else {        printf("parse failed\n");	okay = 0;    }    if (!strcmp(filename, "test/threads/invalid.xml")) {        if (xmlDoValidityCheckingDefaultValue != 0) {	    printf("ValidityCheckingDefaultValue override failed\n");	    okay = 0;	}        if (xmlGenericErrorContext != stdout) {	    printf("xmlGenericErrorContext override failed\n");	    okay = 0;	}    } else {        if (xmlDoValidityCheckingDefaultValue != 1) {	    printf("ValidityCheckingDefaultValue override failed\n");	    okay = 0;	}        if (xmlGenericErrorContext != stderr) {	    printf("xmlGenericErrorContext override failed\n");	    okay = 0;	}    }    if (okay == 0)	return ((DWORD) Failed);    return ((DWORD) Okay);}intmain(){	unsigned int i, repeat;	unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);	DWORD results[MAX_ARGC];	BOOL ret;	xmlInitParser();	for (repeat = 0;repeat < TEST_REPEAT_COUNT;repeat++)	{		xmlLoadCatalog(catalog);		for (i = 0; i < num_threads; i++)		{			results[i] = 0;			tid[i] = (HANDLE) -1;		}		for (i = 0; i < num_threads; i++)		{			DWORD useless;			tid[i] = CreateThread(NULL, 0, 				thread_specific_data, testfiles[i], 0, &useless);			if (tid[i] == NULL)			{				perror("CreateThread");				exit(1);			}		}		if (WaitForMultipleObjects (num_threads, tid, TRUE, INFINITE) == WAIT_FAILED) 			perror ("WaitForMultipleObjects failed");		for (i = 0; i < num_threads; i++)		{			ret = GetExitCodeThread (tid[i], &results[i]);			if (ret == 0)			{				perror("GetExitCodeThread");				exit(1);			}			CloseHandle (tid[i]);		}		xmlCatalogCleanup();		for (i = 0; i < num_threads; i++) {		    if (results[i] != (DWORD) Okay) 			printf("Thread %d handling %s failed\n", i, testfiles[i]);		}	}	xmlCleanupParser();	xmlMemoryDump();	return (0);}#else /* !LIBXML_THREADS_ENABLED */intmain(){    fprintf(stderr, "libxml was not compiled with thread or catalog support\n");    return (0);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -