Data DataCreateWithBytes(unsigned char *bytes, long length) { Data self; if (bytes == NULL || (self = DataCreate()) == NULL) return NULL; self->destroy = DataDestroy; self->_length = length; self->_base = bytes; return self; }
int main(int argc, char **argv) { Data a; struct data data; static unsigned char sample[] = { 1, 2, 3, 4 }; printf("\n--Data--\n"); printf("init local stack object\n"); DataInit(&data); printf("destroy local stack object\n"); data.destroy(&data); printf("create dynamic object"); isNotNull((a = DataCreate())); printf("destroy dynamic object\n"); a->destroy(a); printf("\nDataCreateCopyBytes()"); isNotNull(a = DataCreateCopyBytes(sample, sizeof (sample))); printf("length equals original...%s\n", (size_t) a->length(a) == sizeof (sample) ? "OK" : "FAIL"); printf("content same as original...%s\n", memcmp(a->base(a), sample, sizeof (sample)) == 0 ? "OK" : "FAIL"); printf("destroy a\n"); a->destroy(a); printf("\nDataCreateCopyString()"); isNotNull(a = DataCreateCopyString("sample")); printf("length equals original...%s\n", (size_t) a->length(a) == sizeof ("sample") ? "OK" : "FAIL"); printf("length equals strlen()+1...%s\n", (size_t) a->length(a) == strlen("sample")+1 ? "OK" : "FAIL"); printf("memcmp() with original...%s\n", memcmp(a->base(a), "sample", (long) sizeof ("sample")) == 0 ? "OK" : "FAIL"); printf("strcmp() with original...%s\n", strcmp(a->base(a), "sample") == 0 ? "OK" : "FAIL"); printf("destroy a\n"); a->destroy(a); printf("\n--DONE--\n"); return 0; }
//hlavne vlakno int main(int argc, char *argv[]) { int const THREAD_COUNT = 5; //pocet vlakien pthread_t id[THREAD_COUNT]; //ID vlakien int i; //inicializacia generatora nahodnych cisiel srand(time(NULL)); //vytvorenie kluca pre spedifike premenne //TODO //vytvorenie vstupnych udajov pre vlakna a vytvorenie vlakien for(i = 0; i < THREAD_COUNT; i++ ) { Data * data = DataCreate(i); //vytvorenie a inicializacia parametra //vytvorenie vlakna a predanie parametra pthread_create(&id[i], NULL, Worker, (void *) data); } //cakanie hlavneho vlakna sleep(5); //synchronne zrusenie vlakien for (i = 0; i < THREAD_COUNT; i++) { pthread_cancel(id[i]); } //cakanie na ukoncenie vlakien for (i = 0; i < THREAD_COUNT; i++) { pthread_join(id[i], NULL); //fprintf(stdout, "Data: %c a %d\n", data->label, data->counter); // DataPrintAndDestroy(data); } printf("vsetky pracovne vlakna ukoncene\n"); return EXIT_SUCCESS; }